升级和使用 PLV8 扩展
PLV8 是适用于 PostgreSQL 的可信 Javascript 语言扩展。您可以将其用于存储过程、触发条件和其他可从 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- 自定义格式
- 
            --仅架构 - 仅转储创建架构所需的命令(在本例中为功能) 
- 
            -U- RDS 主用户名
- 
            database- 数据库实例的数据库名称
 有关 pg_dump 的更多信息,请参阅 PostgreSQL 文档中的 pg_dump 。 
- 
            
- 
        提取位于转储文件中的“CREATE FUNCTION”DDL 语句。以下示例使用 grep命令提取创建函数的 DDL 语句并将函数保存到文件中。将在后续步骤中使用该语句重新创建函数。./pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list有关 pg_restore 的更多信息,请参阅 PostgreSQL 文档中的 pg_restore 。 
- 
        删掉函数和扩展。以下示例将删除基于 PLV8 的任何对象。级联选项确保删除任何依赖项。 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