升级和使用 PLV8 扩展 - Amazon Relational Database Service

升级和使用 PLV8 扩展

PLV8 是适用于 PostgreSQL 的可信 Javascript 语言扩展。您可以将其用于存储过程、触发条件和其他可从 SQL 调用的过程代码。PostgreSQL 的所有当前版本都支持此语言扩展。

如果使用 PLV8 并将 PostgreSQL 升级到新的 PLV8 版本,您可以立即利用新扩展。按下列步骤将目录元数据与新版本的 PLV8 进行同步。这些步骤是可选的,但我们强烈建议您完成这些步骤以避免元数据错配警告。

升级过程会丢弃所有现有的 PLV8 功能。因此,建议您在升级之前创建 RDS for PostgreSQL 数据库实例的快照。有关更多信息,请参阅 为 Amazon RDS 的单可用区数据库实例创建数据库快照

将目录元数据与新版本的 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 - 自定义格式

    • --仅架构 - 仅转储创建架构所需的命令(在本例中为功能)

    • -U - RDS 主用户名

    • database - 数据库实例的数据库名称

    有关 pg_dump 的更多信息,请参阅 PostgreSQL 文档中的 pg_dump

  5. 提取位于转储文件中的“CREATE FUNCTION”DDL 语句。以下示例使用 grep 命令提取创建函数的 DDL 语句并将函数保存到文件中。将在后续步骤中使用该语句重新创建函数。

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

    有关 pg_restore 的更多信息,请参阅 PostgreSQL 文档中的 pg_restore

  6. 删掉函数和扩展。以下示例将删除基于 PLV8 的任何对象。级联选项确保删除任何依赖项。

    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