昨日でPython本体の準備が終わり、後は5月19日の記事とほぼ同じです。
PostgreSQL 9.5 RC1の起動バッチファイルに設定追加
追加前のバッチファイルは先日の記事(WindowsでPostgreSQL 9.5 RC1をポータブルに動かす)にあります。今日はそれに環境変数pythonhomeとpathを設定し、PostgreSQLサーバからPythonが見えるようにするだけ。追加はわずか2行で、例えば ↓ こんな感じ。PostgreSQLと同じドライブの/AppsPortable/Python/3.3.5/に、昨日準備したフォルダ・ファイル群を持ってきた場合です。
@echo off
set pgdir=./
set ctl=%pgdir%/bin/pg_ctl
set dir=%pgdir%/data
set pid=%dir%/postmaster.pid
:: set environmental variables for PostGIS Raster
set GDAL_DATA=../gdal-data
set POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL
set POSTGIS_ENABLE_OUTDB_RASTERS=1
:: set environmental variables for PL/Python3 ここが追加部分
set pythonhome=%~d0/AppsPortable/Python/3.3.5
set path=%pythonhome%
:: indicate that Python exists ここは追加部分の確認用
echo for PL/Python
python -V
echo.
if exist "%pid%" (
echo postmaster.pid exists and PostgreSQL have been started possibly.
goto ask
) else (
"%ctl%" -D "%dir%" start
)
:ask
set /p inp="press [R] to restart PostgreSQL, [Q] to quit : "
if "%inp%"=="R" (
"%ctl%" -D "%dir%" restart
) else if "%inp%"=="Q" (
"%ctl%" -D "%dir%" stop
goto :eof
)
goto ask
このバッチファイルでPostgreSQLを起動すると ↓ 最初にPythonのバージョンを表示。後はこれまでと同様に、再起動(R)か終了(Q)のコマンドが来るまでデータベースサーバが待ち受けます。
PL/Pythonのテスト(無名コードブロックでウェブアクセス)
以上で準備は終わり。最後に実際にPL/Pythonを使えるかテストしました。下記のコードは入力部分のみで、結果はその下のコンソール画像を見て下さい。テスト用DBを作ってCREATE EXTENSIONするまでは、PL/RやPL/v8と同様。今回の拡張名・言語名はplpython3uになります。uはuntrusted、スーパーユーザのみ実行権限を持ちます。
# カレントディレクトリを表示
cd
# PostgreSQLに接続
psql -U postgres
# テスト用データベースを作り、そこに接続し直す
create database test_plpy;
\c test_plpy
# PL/Pythonインストール
create extension plpyton3u;
# テスト(PL/Pythonの無名コードブロックでウェブアクセス)
do language plpython3u $$
from urllib.request import urlopen;
plpy.info(urlopen('http://kenpg.bitbucket.org/').read());
$$;
最後は昨日Pythonシェルで行ったのと同じ、ただしprintの代わりにPL/Pythonのメッセージ出力用関数plpy.infoを使用。テストなので無名コードブロックにしましたが、ストアド化してURLを引数で渡せばPostgreSQLのクエリでウェブアクセスでき、例えばWebAPIでデータを取ってきて直接DBに入れることも可能です。