Uso de extensiones PostgreSQL con Amazon RDS para PostgreSQL
Puede ampliar la funcionalidad de PostgreSQL instalando una variedad de extensiones y módulos. Por ejemplo, para trabajar con datos espaciales, puede instalar y utilizar la extensión de PostGIS. Para obtener más información, consulte Administración de datos espaciales con la extensión PostGIS. Otro ejemplo, si desea mejorar la entrada de datos para tablas muy grandes, puede considerar la posibilidad de particionar los datos con la extensión pg_partman
. Para obtener más información, consulte Administración de las particiones de PostgreSQL con la extensión pg_partman.
Según la versión de RDS para PostgreSQL, la instalación de una extensión podría requerir permisos rds_superuser
, de la siguiente forma:
Para versiones 12 y anteriores de RDS para PostgreSQL, la instalación de extensiones requiere privilegios de
rds_superuser
.Para la versión 13 y superiores de RDS para PostgreSQL , los usuarios (roles) con permisos de creación en una instancia de base de datos determinada pueden instalar y utilizar cualquier extensión de confianza. Para obtener una lista de las extensiones de confianza, consulte Extensiones de confianza de PostgreSQL.
También puede especificar con precisión qué extensiones se pueden instalar en la instancia de base de datos de RDS para PostgreSQL, enumerándolas en el parámetro rds.allowed_extensions
. De forma predeterminada, este parámetro no está configurado, por lo que se puede agregar cualquier extensión compatible si el usuario tiene permisos para hacerlo. Al agregar una lista de extensiones a este parámetro, identifica explícitamente las extensiones que puede utilizar su instancia de base de datos de RDS para PostgreSQL. Las extensiones que no aparecen en la lista no se pueden instalar. Esta capacidad está disponible para las siguientes versiones:
-
RDS para PostgreSQL, versiones 14.1 y todas las superiores
-
RDS para PostgreSQL, versiones 13.2 y versiones menores superiores
-
RDS para PostgreSQL, versiones 12.6 y versiones menores superiores
Para obtener más información, consulte Restringir la instalación de extensiones de PostgreSQL.
Para obtener más información acerca del rol rds_superuser
, consulte Descripción de los roles y permisos de PostgreSQL.
Temas
- Uso de las funciones de la extensión orafce
- Administración de las particiones de PostgreSQL con la extensión pg_partman
- Registro a nivel de sesión y objeto con la extensión pgAudit
- Programación de mantenimiento con la extensión pg_cron de PostgreSQL
- Reducción de la sobrecarga en tablas e índices con la extensión pg_repack
- Actualización y uso de la extensión PLV8
- Administración de datos espaciales con la extensión PostGIS
Uso de las funciones de la extensión orafce
La extensión orafce brinda funciones y operadores que emulan un subconjunto de funciones y paquetes de una base de datos de Oracle. La extensión orafce facilita la realización de la portabilidad de una aplicación Oracle a PostgreSQL. Esta extensión es compatible con la versión 9.6.6 y posteriores de RDS for PostgreSQL. Para obtener más información sobre orafce, consulte orafce
RDS for PostgreSQL no admite el paquete utl_file
que forma parte de la extensión orafce. Esto se debe a que las funciones del esquema utl_file
proporcionan operaciones de lectura y escritura con archivos de texto del sistema operativo, lo que requiere el acceso de los superusuarios al host subyacente. Como servicio administrado, RDS for PostgreSQL no brinda acceso al host.
Para usar la extensión orafce
Conéctese a la instancia de base de datos usando el nombre de usuario maestro que utilizó para crear la instancia de base de datos.
Si desea activar orafce para una base de datos diferente en la misma instancia de base de datos, utilice el comando psql
/c dbname
. Con este comando, cambia de la base de datos principal después de iniciar la conexión.Active la extensión orafce con la instrucción
CREATE EXTENSION
.CREATE EXTENSION orafce;
Transfiera la propiedad del esquema de Oracle al rol rds_superuser con la instrucción
ALTER SCHEMA
.ALTER SCHEMA oracle OWNER TO rds_superuser;
Si desea ver la lista de propietarios del esquema de Oracle, utilice el comando
\dn
de psql.
Registro a nivel de sesión y objeto con la extensión pgAudit
Puede registrar la actividad a nivel de sesión o a nivel de objeto mediante la instalación de la extensión PostgreSQL Audit (pgAudit) en la instancia de base de datos de RDS for PostgreSQL. Esta extensión es compatible con todas las versiones disponibles de RDS for PostgreSQL. Utiliza el mecanismo de registro nativo subyacente de PostgreSQL.
Para obtener más información sobre la extensión pgAudit, consulte pgAudit
Con la auditoría de sesiones, puede registrar eventos de auditoría de varios orígenes e incluir el texto completo de los comandos cuando esté disponible. Modifique el grupo de parámetros personalizado que está asociado con su instancia de base de datos para que shared_preload_libraries
contenga pgaudit. Luego, configure el parámetro pgaudit.log
para registrar cualquiera de los siguientes tipos de eventos:
-
READ
: registraSELECT
yCOPY
cuando el origen es una relación o una consulta. -
WRITE
: registraINSERT
,UPDATE
,DELETE
,TRUNCATE
yCOPY
cuando el destino es una relación. -
FUNCTION
: registra llamadas a funciones y bloquesDO
. -
ROLE
: registra instrucciones relacionadas con roles y privilegios, como, por ejemplo,GRANT
,REVOKE
,CREATE ROLE
,ALTER ROLE
yDROP ROLE
. -
DDL
: registra todas las instrucciones del lenguaje de definición de datos (DDL) que no están incluidas en la claseROLE
. -
MISC
: registra comandos variados como, por ejemplo,DISCARD
,FETCH
,CHECKPOINT
,VACUUM
ySET
.
Para registrar varios tipos de eventos con auditorías de sesiones, utilice una lista separada por comas. Para registrar todos los tipos de eventos, establezca pgaudit.log
en ALL
. Reinicie la instancia de base de datos para aplicar los cambios.
Con la auditoría de objetos, puede mejorar los registros de auditoría para que funcionen con algunas relaciones específicas. Por ejemplo, puede especificar que desea crear registros de auditoría para las operaciones READ
en un número concreto de tablas.
Para utilizar la extensión pgAudit, agregue pgaudit
al parámetro shared_preload_libraries
en la instancia de base de datos de RDS for PostgreSQL. No se pueden editar valores en los grupos de parámetros de base de datos predeterminados, por lo que es necesario utilizar un grupo de parámetros de base de datos personalizado para la instancia de base de datos. Para obtener más información acerca de los grupos de parámetros, consulte Trabajo con los grupos de parámetros.
Para utilizar la auditoría de objetos con la extensión pgAudit
-
Cree un rol de base de datos llamado
rds_pgaudit
mediante el siguiente comando.CREATE ROLE rds_pgaudit;
-
Modifique el grupo de parámetros de base de datos personalizado que está asociado con la instancia de base de datos de la siguiente manera:
Agregue
pgaudit
a la lista de parámetrosshared_preload_libraries
. Cuando utilice la AWS CLI, ejecute lo siguiente.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pgaudit,ApplyMethod=pending-reboot" \ --regionaws-region
-
pgaudit.role
se debe establecer en el rolrds_pgaudit
. Cuando utilice la AWS CLI, ejecute lo siguiente.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=pgaudit.role,ParameterValue=rds_pgaudit,ApplyMethod=pending-reboot" \ --regionaws-region
-
Reinicie la instancia de base de datos para que los cambios en el grupo de parámetros surtan efecto.
aws rds reboot-db-instance \ --db-instance-identifier
your-RDS-db-instance
\ --regionaws-region
-
Ejecute el siguiente comando para confirmar que
pgaudit
se ha inicializado.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)
Ejecute el siguiente comando para crear la extensión
pgaudit
.CREATE EXTENSION pgaudit;
Ejecute el siguiente comando para confirmar que
pgaudit.role
tiene el valorrds_pgaudit
.SHOW pgaudit.role;
pgaudit.role ------------------ rds_pgaudit
Para probar el registro de pgAudit, puede ejecutar varios comandos de ejemplo que desee auditar. Por ejemplo, podría ejecutar los siguientes comandos.
CREATE TABLE t1 (id int); GRANT SELECT ON t1 TO rds_pgaudit; SELECT * FROM t1;
id ---- (0 rows)
Los registros de base de datos contendrán una entrada similar a la siguiente.
...
2017-06-12 19:09:49 UTC:...:rds_test@postgres:[11701]:LOG: AUDIT:
OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1;
...
Para obtener información acerca de la visualización de los registros, consulte Supervisión de archivos de registro de Amazon RDS.
Reducción de la sobrecarga en tablas e índices con la extensión pg_repack
Puede utilizar la extensión pg_repack para eliminar la sobrecarga de las tablas y los índices. Esta extensión es compatible con RDS para las versiones 9.6.3 y superiores de PostgreSQL. Para obtener más información sobre la extensión pg_repack, consulte la documentación del proyecto de GitHub
Para usar la extensión pg_repack
-
Instale la extensión pg_repack en la instancia de base de datos de RDS for PostgreSQL mediante el siguiente comando.
CREATE EXTENSION pg_repack;
-
Ejecute los siguientes comandos para conceder acceso de escritura para volver a reempaquetar las tablas de registro temporales creadas por pg_repack.
ALTER DEFAULT PRIVILEGES IN SCHEMA repack GRANT INSERT ON TABLES TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA repack GRANT USAGE, SELECT ON SEQUENCES TO PUBLIC;
Conéctese a la base de datos mediante la utilidad de cliente pg_repack. Utilice una cuenta que tenga privilegios
rds_superuser
. Por ejemplo, suponga que ese rolrds_test
tiene privilegiosrds_superuser
. La sintaxis del comando se muestra a continuación.pg_repack -h
db-instance-name
.111122223333.aws-region
.rds.amazonaws.com -U rds_test -k postgresConéctese usando la opción -k. La opción -a no se admite.
La respuesta del cliente pg_repack proporciona información relativa a las tablas de la instancia de base de datos que se han vuelto a empaquetar.
INFO: repacking table "pgbench_tellers" INFO: repacking table "pgbench_accounts" INFO: repacking table "pgbench_branches"
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 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 pvl8 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