Actualización y uso de la extensión PLV8
PLV8 es una extensión de lenguaje Javascript de confianza para PostgreSQL Puede usarlo para procedimientos almacenados, desencadenadores y otro código de procedimiento que se puede llamar desde SQL. Esta extensión de lenguaje es compatible con todas las versiones actuales de PostgreSQL.
Si utiliza PLV8
El proceso de actualización elimina todas las funciones PLV8 existentes. Por lo tanto, le recomendamos que cree una instantánea de su instancia de base de datos de RDS for PostgreSQL antes de la actualización. Para obtener más información, consulte Creación de una instantánea de base de datos para una instancia de base de datos single-AZ para Amazon RDS.
importante
A partir de la versión 18 de PostgreSQL, Amazon RDS para PostgreSQL dejará de utilizar las extensiones plcoffee
y plls
de PostgreSQL. Le recomendamos que deje de usar Coffeescript y LiveScript en sus aplicaciones para asegurarse de tener una ruta de actualización para futuras actualizaciones de las versiones del motor.
Para sincronizar los metadatos del catálogo con una nueva versión de PLV8
-
Verifique que necesita realizar la actualización. Para ello, ejecute el siguiente comando mientras está conectado a la instancia.
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
Si los resultados contienen valores de una versión instalada con un número inferior a la versión predeterminada, continúe con este procedimiento para actualizar las extensiones. Por ejemplo, el siguiente conjunto de resultados indica que debería actualizar.
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)
-
Cree una instantánea de la instancia de base de datos de RDS for PostgreSQL si aún no lo ha hecho. Puede continuar con los pasos siguientes mientras se crea la instantánea.
-
Obtenga un recuento del número de funciones de PLV8 de su instancia de base de datos para que pueda validar que se aplican todas después de la actualización. Por ejemplo, la siguiente consulta SQL devuelve el número de funciones escritas en plv8, plcoffee y 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');
-
Use pg_dump para crear un archivo de volcado solo de esquema. Por ejemplo, cree un archivo en el equipo cliente en el directorio
/tmp
../pg_dump -Fc --schema-only -U master postgres >/tmp/test.dmp
En este ejemplo se utilizan las siguientes opciones:
-
-Fc
: formato personalizado -
--schema-only: vuelca solo los comandos necesarios para crear el esquema (funciones en este caso)
-
-U
: el nombre de usuario maestro de RDS -
database
: el nombre de la base de datos para nuestra instancia de base de datos
Para obtener más información sobre pg_dump, consulte pg_dump
en la documentación de PostgreSQL. -
-
Extraiga la instrucción DDL "CREATE FUNCTION" que se encuentra en el archivo de volcado. El siguiente ejemplo utiliza el comando
grep
para extraer la instrucción DDL que crea las funciones y guardarlas en un archivo. Se utiliza en los pasos posteriores para volver a crear las funciones../pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list
Para obtener más información sobre pg_restore, consulte pg_restore
en la documentación de PostgreSQL. -
Borre las funciones y las extensiones. El siguiente ejemplo elimina cualquier objeto basado en PLV8. La opción cascade garantiza que se borren los dependientes.
DROP EXTENSION plv8 CASCADE;
Si su instancia de PostgreSQL contiene objetos basados en plcoffee o plls, repita este paso para dichas extensiones.
-
Cree las extensiones. El siguiente ejemplo crea las extensiones plv8, plcoffee y plls.
CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
-
Cree las funciones con el archivo de volcado y el archivo "driver".
El siguiente ejemplo recrea las funciones que extrajo anteriormente.
./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
-
Verifique que todas las funciones se recrean con la siguiente consulta.
SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');
La versión 2 de PLV8 agrega la siguiente fila adicional a su conjunto de resultados:
proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8