昨日でPython本体の準備が終わり、後は519日の記事とほぼ同じです。
実行環境 過去記事と関連リンク PL/Pythonに使うPythonのバージョンを確認 最小限でポータブルなWindowsPython 3.3を準備 Python単体のテスト(ここまで昨日)
Contents


PostgreSQL 9.5 RC1の起動バッチファイルに設定追加

追加前のバッチファイルは先日の記事(WindowsPostgreSQL 9.5 RC1をポータブルに動かす)にあります。今日はそれに環境変数pythonhomepathを設定し、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/RPL/v8と同様。今回の拡張名・言語名はplpython3uになります。uuntrusted、スーパーユーザのみ実行権限を持ちます。
# カレントディレクトリを表示
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に入れることも可能です。