PL/Python手続き言語を使用してPostgreSQLの関数をPython言語で作成することができます。
PL/Pythonを特定のデータベースにインストールするには、createlang plpython dbnameを使用してください。
ティップ: 言語をtemplate1にインストールすると、その後に作成されるデータベース全てにその言語は自動的にインストールされます。
PostgreSQL 7.4より、PL/Pythonは"信頼されない"(つまり、ユーザが実行可能なことを制限する方法を提供しない)言語としてのみ利用可能です。 したがって、plpythonuという名前に変更されました。 Pythonで新しい安全な実行手法が開発されたら、将来信頼できるplpythonの亜種は利用可能になるかもしれません。
注意: ソースパッケージを使用するユーザは、インストールプロセスの間PL/Pythonの構築を特に使用可能にしておく必要があります (詳細については、インストール手順を参照してください)。 バイナリパッケージを使用する場合は、別個のサブパッケージにPL/Pythonが入っている可能性があります。
PL/Pythonで作成された関数は通常のCREATE FUNCTION構文で宣言されます。 以下に例を示します。
CREATE FUNCTION myfunc(text) RETURNS text AS 'return args[0]' LANGUAGE plpythonu;
関数定義の本体として提供されたPythonのコードはPythonの関数に変換されます。 例えば上の例は以下のようになります。
def __plpython_procedure_myfunc_23456(): return args[0]
ここで、23456はPostgreSQLにより割り当てられたこの関数のOIDです。
戻り値を用意していない場合、PythonはデフォルトのNoneを返します。 PL/Pythonは、PythonのNoneをSQLのNULL値に変換します。
PostgreSQL関数のパラメータは、グローバルなargs
リスト内で使用することができます。
上のmyfunc
では、args[0]
には渡されたものがテキスト引数として格納されています。
myfunc2(text, integer)の場合は、args[0]
にはtext引数が、args[1]
にはinteger引数が格納されます。
グローバルなSD
辞書は、関数呼び出し間のデータ保存のために使用することができます。
この変数はプライベートな静的データです。
グローバルなGD
辞書は、共有データであり、セッション内の全てのPython関数で使用することができます。
注意して使用してください。
各関数は、Pythonインタプリタ内で自身の実行環境を入手します。
そのため、myfunc
によるグローバルデータと関数の引数はmyfunc2
から使用することはできません。
上記で説明した通り、GD
辞書内のデータは例外です。