PL/pgSQL を使う

PostgreSQL で function を使う際には LANGUAGE 句で言語を指定する必要があります。このとき

LANGUAGE 'sql'

と、指定すると複雑な構文が利用できません。PL/pgSQL の機能を使いたい場合、以下のように指定します。

LANGUAGE 'plpgsql'

ですが、この LANGUAGE はデフォルトでは設定されていないため、別途作成する必要があります。

createlang plpgsql database

database には対象となるデータベース名を指定して下さい。

なお MacPorts からインストールした PostgreSQL では createlang のパスが通っていませんでした。以下がフルパスになります(PostgreSQL 8.1 の場合)。

/opt/local/lib/postgresql81/bin/createlang

また MacPorts の場合バージョン毎にユーザを分けて作成するため、コマンドを実行するユーザは postgres ではなく postgres81 のようなバージョンに応じたユーザになります。

sudo su postgres81 -c '/opt/local/lib/postgresql81/bin/createlang plpgsql database'