本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
升級和使用 PLV8 擴充功能
PLV8 是值得信賴的 JavaScript 語言擴充功能,適用於 PostgreSQL。您可用於存放的程序、觸發程序和可從 SQL 呼叫的其他程序性程式碼。所有目前版本的 PostgreSQL 都支援此語言擴充功能。
如果您使用 PLV8
升級程序會捨棄您現有的所有 PLV8 函數。因此,我們建議您在升級之前建立 RDS for PostgreSQL 資料庫執行個體的快照。如需詳細資訊,請參閱為 Amazon 的單一可用區域資料庫執行個體建立資料庫快照 RDS。
重要
從 PostgreSQL 第 18 版開始,Amazon RDS for PostgreSQL 將取代 plcoffee
和 plls
PostgreSQL 延伸模組。我們建議您在應用程式中停止使用 CoffeeScript 和 LiveScript,以確保您有未來引擎版本升級的升級路徑。
如何同步目錄中繼資料與新版 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 資料庫執行個體的快照,請建立一個。建立快照時,您可以繼續執行下列步驟。
-
取得資料庫執行個體中的 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 或 plls 為基礎的物件,請對這些擴充功能重複此步驟。
-
建立擴充功能。下列範例會建立 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