PLV8 拡張機能のアップグレードおよび使用
PLV8 は、信頼できる JavaScript 言語の PostgreSQL 用エクステンションです。ストアドプロシージャ、トリガー、SQL から呼び出し可能なその他のプロシージャルコードに使用できます。この言語のエクステンションは、PostgreSQL のすべての最新リリースでサポートされています。
PLV8
アップグレードプロセスでは、既存の PLV8 機能がすべて削除されます。そのため、アップグレードする前に、RDS for PostgreSQL DB インスタンスのスナップショットを作成しておくことをお勧めします。詳細については、「Amazon RDS のシングル AZ DB インスタンスの DB スナップショットの作成」を参照してください。
カタログメタデータを新しいバージョンの PLV8 と同期させるには
-
更新する必要があることを確認します。そのためには、インスタンスに接続されている間に以下のコマンドを実行します。
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
インストールされているバージョンとしてデフォルトのバージョンより低いバージョンが表示された場合は、この手順を実行して、エクステンションを更新する必要があります。例えば、以下の結果セットは更新の必要があることを表します。
name | default_version | installed_version | comment --------+-----------------+-------------------+-------------------------------------------------- plls | 2.1.0 | 1.5.3 | PL/LiveScript (v8) trusted procedural language plcoffee| 2.1.0 | 1.5.3 | PL/CoffeeScript (v8) trusted procedural language plv8 | 2.1.0 | 1.5.3 | PL/JavaScript (v8) trusted procedural language (3 rows)
RDS for PostgreSQL DB インスタンスのスナップショットを作成していない場合は、作成してください。次のステップは、スナップショットの作成中も続行できます。
-
DB インスタンスの PLV8 関数の数を取得し、アップグレード後にすべて揃っていることを確認できるようにします。例えば次の SQL クエリ では、plv8、plcoffee、plls で記述されている関数の数が返ります。
SELECT proname, nspname, lanname FROM pg_proc p, pg_language l, pg_namespace n WHERE p.prolang = l.oid AND n.oid = p.pronamespace AND lanname IN ('plv8','plcoffee','plls');
-
pg_dump を使用して、スキーマのみのダンプファイルを作成します。例えば、クライアントマシンの
/tmp
ディレクトリに、ファイルを作成します。./pg_dump -Fc --schema-only -U master postgres >/tmp/test.dmp
この例では、以下のオプションを使用します。
-
-Fc
– カスタム形式 -
-- スキーマのみ – スキーマの作成に必要なコマンド (ここでは関数) のみをダンプする
-
-U
– RDS マスターユーザー名 -
database
– DB インスタンスのデータベース名
pg_dump の詳細については、「PostgreSQL ドキュメント」の「pg_dump
」を参照してください。 -
-
ダンプファイルに存在する "CREATE FUNCTION" DDL ステートメントを抽出します。次の例では
grep
コマンドを実行して、関数を作成する DDL ステートメントを抽出し、ファイルに保存します。この ddl は後続のステップで関数を再作成するために使用します。./pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list/
pg_restore の詳細については、「PostgreSQL ドキュメント」の「pg_restore
」を参照してください。 -
関数およびエクステンションを削除します。次の例では、PLV8 ベースのオブジェクトを削除します。CASCADE オプションでは、すべての依存が削除されます。
DROP EXTENSION plv8 CASCADE;
plcoffee または plls に基づくオブジェクトが PostgreSQL インスタンスに含まれている場合は、それらのエクステンションに対してこのステップを繰り返します。
-
エクステンションを作成します。次の例では、plv8、plcoffee、plls のエクステンションが作成されます。
CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
-
ダンプファイルおよび "ドライバ" ファイルを使用して関数を作成します。
次の例では、前に抽出した関数が再作成されます。
./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
-
次のクエリを使用して、すべての関数が再作成されたことを確認します。
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
PLV8 バージョン 2 では、次の行が結果セットに追加されます。
proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8