PL/Python - Python 手続き言語

PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# 第 38章PL/Python - Python 手続き言語

PL/Python手続き言語を使用してPostgreSQLの関数をPython言語で作成することができます。

PL/Pythonを特定のデータベースにインストールするには、`createlang plpython `dbname``を使用してください。

> ティップ: 言語を`template1`にインストールすると、その後に作成されるデータベース全てにその言語は自動的にインストールされます。

PostgreSQL 7.4より、PL/Pythonは"信頼されない"(つまり、ユーザが実行可能なことを制限する方法を提供しない)言語としてのみ利用可能です。 従って、`plpythonu`という名前に変更されました。 Pythonで新しい安全な実行手法が開発されたら、将来信頼できる`plpython`の亜種は利用可能になるかもしれません。

> 注意: ソースパッケージを使用するユーザは、インストールプロセスの間PL/Pythonの構築を特に使用可能にしておく必要があります。 (詳細については、インストール手順を参照してください。) バイナリパッケージを使用する場合は、別個のサブパッケージにPL/Pythonが入っている可能性があります。

# 38.1. PL/Python 関数

PL/Pythonで作成された関数は通常の方法で宣言されます。 以下に例を示します。

    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`辞書内のデータは例外です。

前のページ | ホーム | 次のページ
制限および存在しない機能 | 上に戻る | トリガ関数