本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
升級和使用PLV8延伸模組
PLV8 是 Postgre 的受信任 Javascript 語言延伸模組SQL。您可以將其用於可從 呼叫的預存程序、觸發程序和其他程序程式碼SQL。Postgre 的所有目前版本都支援此語言延伸SQL。
如果您使用 PostgreSQL PLV8
升級程序會捨棄所有現有的PLV8函數。因此,我們建議您在升級之前建立 RDS for PostgreSQL 資料庫執行個體的快照。如需詳細資訊,請參閱為 Amazon 的單一可用區域資料庫執行個體建立資料庫快照 RDS。
將您的目錄中繼資料與新版本的 同步 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適用於 PostgreSQL 資料庫執行個體的快照。建立快照時,您可以繼續執行下列步驟。
-
取得資料庫執行個體中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
– 自訂格式 -
--schema-only – 僅傾印建立結構描述所需的命令 (我們案例中的函數)
-
-U
– RDS主要使用者名稱 -
database
– 資料庫執行個體上的資料庫名稱
如需 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;
如果您的 PostgreSQL 執行個體包含以 plcoffee 或 pll 為基礎的物件,請對這些延伸模組重複此步驟。
-
建立擴充功能。下列範例會建立 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');
第 2 PLV8版會將下列額外資料列新增至您的結果集:
proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8