升級和使用 PLV8 擴充功能 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

升級和使用 PLV8 擴充功能

PLV8 是值得信賴的 JavaScript 語言擴充功能,適用於 PostgreSQL。您可用於存放的程序、觸發程序和可從 SQL 呼叫的其他程序性程式碼。所有目前版本的 PostgreSQL 都支援此語言擴充功能。

如果您使用 PLV8 並將 PostgreSQL 升級至新的 PLV8 版本,即可立即利用新的擴充功能套件。執行下列步驟,同步目錄中繼資料與新版的 PLV8。這些步驟為選用,但強烈建議您完成步驟以避免中繼資料不符的警告。

升級程序會捨棄您現有的所有 PLV8 函數。因此,我們建議您在升級之前建立 RDS for PostgreSQL 資料庫執行個體的快照。如需詳細資訊,請參閱為 Amazon 的單一可用區域資料庫執行個體建立資料庫快照 RDS

重要

從 PostgreSQL 第 18 版開始,Amazon RDS for PostgreSQL 將取代 plcoffeeplls PostgreSQL 延伸模組。我們建議您在應用程式中停止使用 CoffeeScript 和 LiveScript,以確保您有未來引擎版本升級的升級路徑。

如何同步目錄中繼資料與新版 PLV8
  1. 確認您需要更新。若要執行此動作,請在已連接至執行個體的情況下,執行下列命令。

    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)
  2. 如果您尚未建立 RDS for PostgreSQL 資料庫執行個體的快照,請建立一個。建立快照時,您可以繼續執行下列步驟。

  3. 取得資料庫執行個體中的 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');
  4. 使用 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

  5. 擷取傾印檔案中存在的「CREATE FUNCTION」DDL 陳述式。下列範例使用 grep 命令擷取用於建立函數並儲存到檔案中的 DDL 陳述式。您將於後續步驟中使用此 ddl 來重新建立函數。

    ./pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list

    如需有關 pg_restore 的詳細資訊,請參閱 PostgreSQL 文件中的 pg_restore

  6. 捨棄函數和擴充功能。下列範例會捨棄任何以 PLV8 為基礎的物件。cascade 選項可確保捨棄任何相依物件。

    DROP EXTENSION plv8 CASCADE;

    如果 PostgreSQL 執行個體包含以 plcoffee 或 plls 為基礎的物件,請對這些擴充功能重複此步驟。

  7. 建立擴充功能。下列範例會建立 plv8、plcoffee 和 plls 擴充功能。

    CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
  8. 使用傾印檔案和「驅動程式」檔案建立函數。

    下列範例會重新建立您先前擷取的函數。

    ./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
  9. 使用以下查詢驗證是否已重新建立所有函數。

    SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');

    PLV8 第 2 版會將以下額外的資料列新增至結果集:

    proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8