Gestión de extensiones de PostgreSQL

En PostgreSQL, las extensiones son módulos que suministran tipos, operadores o funciones adicionales. Hay muchas extensiones disponibles en IBM Cloud® Databases for PostgreSQL. Para utilizarlos, configura la contraseña de administrador de tu servicio y, a continuación, utiliza para psql conectarte.

Listado de extensiones instaladas

Obtenga una lista de todas las extensiones instaladas en una base de datos utilizando el mandato \dx.

Por ejemplo, la salida de \dx cuando se ejecuta en la base de datos predeterminada de Databases for PostgreSQL muestra la única extensión instalada.

ibmclouddb=> \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)

Instalación de extensiones

Para instalar una extensión en una base de datos, utiliza CREATE EXTENSION. Por ejemplo, para instalar pg_stat_statements en la base ibmclouddb de datos, utiliza el siguiente comando :

ibmclouddb=> CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION

Las extensiones se instalan en el esquema ibm_extension de sólo lectura. El esquema forma parte de search_path, por lo que no es necesario que los objetos de extensión se califiquen con un esquema. El cambio del esquema public al esquema ibm_extension es necesario para proteger la seguridad y la integridad de los datos.

Si ejecuta el mandato \dx después de instalar una extensión, aparecerá en la tabla.

ibmclouddb=> \dx
                                             List of installed extensions
        Name        | Version |    Schema     |                              Description
--------------------+---------+---------------+------------------------------------------------------------------------
 pg_stat_statements | 1.10    | ibm_extension | track planning and execution statistics of all SQL statements executed
 plpgsql            | 1.0     | pg_catalog    | PL/pgSQL procedural language
(2 rows)

Las extensiones de base de datos en PostgreSQL se gestionan para cada base de datos. Si tienes varias bases de datos en las que necesitas instalar una extensión, ejecuta el comando CREATE en cada una de ellas.

Actualización de extensiones

Para ver las extensiones de la base de datos actual para las que hay una versión más reciente disponible, ejecuta la siguiente consulta:

SELECT e.extname, e.extversion AS installed_version, a.default_version AS available_version
FROM pg_catalog.pg_extension AS e
JOIN pg_catalog.pg_available_extensions AS a ON a.name = e.extname
WHERE e.extversion <> a.default_version;

Para actualizar una extensión, ejecuta el comando ALTER EXTENSION en cada base de datos en la que esté instalada la extensión:

ALTER EXTENSION <extension_name> UPDATE;

Las siguientes extensiones requieren un procedimiento diferente:

  • Para actualizar la extensión pg_repack, ejecute y DROP EXTENSION pg_repack;, a continuación, en CREATE EXTENSION pg_repack; cada base de datos que la utilice.
  • El anonimizador de PostgreSQL (anon) no es compatible con ALTER EXTENSION ... UPDATE. Para actualizarlo, consulta Actualización de PostgreSQL Anonymizer.
  • Al actualizar la versión 3.x, se pasa pgRouting a la versión 4.0, en la que se han eliminado varias funciones. Antes de actualizar, consulta pgRouting.

Notas específicas de la extensión

pg_repack

  • La documentación de pg_repack

  • Cuando ejecutes el comando pg_repack, incluye el indicador -k para omitir la comprobación de superusuario. Consulte el ejemplo siguiente:

    pg_repack -k [OPTION]... [DBNAME]
    
  • Cualquier usuario puede ejecutar pg_repack, pero el mandato solo podrá volver a empaquetar una tabla sobre la que tenga permisos.

  • pg_repack necesita tener un bloqueo exclusivo sobre los objetos que va a reorganizar al final de la reorganización. Si no puede obtener este bloqueo después de un determinado periodo, cancelará todas las consultas en conflicto. Si no puede hacerlo, la reorganización fallará. Por defecto, solo el usuario administrador puede cancelar las consultas conflictivas. Para permitir que otros usuarios de la base de datos cancelen consultas, concédeles el rol pg_signal_backend desde la cuenta de administrador.

pgaudit

  • El servicio carga la biblioteca pgaudit al iniciarse. No se puede crear la extensión pgaudit, por lo que las entradas DDL de los registros de auditoría no incluyen el tipo ni el nombre del objeto. Para activar los pgaudit registros, consulta Registro con pgaudit.

pgvector

  • Para añadir la extensión pgvector a su implantación, utilice el comando create extension vector.
  • Importante: pgvector requiere PostgreSQL versión 15 o superior.

Extensiones disponibles

Consulte la siguiente lista de todas las extensiones disponibles. Para obtener una lista de las extensiones disponibles en el despliegue, utilice SELECT name FROM pg_available_extensions; en psql.

ibmclouddb=> SELECT name FROM pg_available_extensions order by 1;
             name
------------------------------
 address_standardizer
 address_standardizer_data_us
 amcheck
 autoinc
 bloom
 btree_gin
 btree_gist
 citext
 cube
 dblink
 dict_int
 dict_xsyn
 earthdistance
 file_fdw
 fuzzystrmatch
 hstore
 insert_username
 intagg
 intarray
 isn
 lo
 ltree
 moddatetime
 old_snapshot
 pageinspect
 pg_buffercache
 pg_freespacemap
 pg_prewarm
 pg_repack
 pg_stat_statements
 pg_surgery
 pg_trgm
 pg_visibility
 pg_walinspect
 pgaudit
 pgcrypto
 pgrouting
 pgrowlocks
 pgstattuple
 plpgsql
 postgis
 postgis_raster
 postgis_tiger_geocoder
 postgis_topology
 postgres_fdw
 refint
 seg
 sslinfo
 tablefunc
 tcn
 tsm_system_rows
 tsm_system_time
 unaccent
 uuid-ossp
 xml2
(55 rows)
ibmclouddb=> select version();
                                                 version
----------------------------------------------------------------------------------------------------------
 PostgreSQL 16.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-2), 64-bit
(1 row)