Extensiones de PostgreSQL

PostgreSQL proporciona una forma de ampliar la funcionalidad de una base de datos mediante la agrupación de objetos SQL en un paquete y su uso como una unidad. En esta página, se describen las extensiones de PostgreSQL y las extensiones compatibles con Cloud SQL.

Usa extensiones de PostgreSQL

Solo puedes instalar las extensiones que sean compatibles con Cloud SQL.

Instala una extensión

Antes de usar una extensión, debes instalarla:

Requisitos para los privilegios de los superusuarios

En Cloud SQL, solo los usuarios que forman parte de la función cloudsqlsuperuser pueden crear extensiones. Cuando creas una instancia nueva de PostgreSQL, se crea el usuario de postgres predeterminado por ti (aunque debes establecer la contraseña del usuario). El usuario de postgres predeterminado es parte de la función cloudsqlsuperuser. Para obtener más información, consulta Usuarios de PostgreSQL.

Conexiones entre bases de datos

Las instancias de destino para las conexiones deben estar en la misma red de VPC que la instancia de conexión.

En Google Cloud Console, no puedes elegir el botón Solo permitir conexiones SSL para instancias de clústeres. Además, para conectarte a otras bases de datos alojadas en la misma instancia, no puedes establecer el host en localhost ni en 127.0.0.1. En su lugar, debes usar la dirección IP que se muestra para tu instancia en Google Cloud Console.

Solicita asistencia para una extensión nueva

No puedes crear tus propias extensiones en Cloud SQL.

Si quieres solicitar asistencia para una extensión, agrega un voto ¡Yo también! para el problema en la Herramienta de seguimiento de errores (en Cloud SQL) o crea un problema nuevo allí.

Extensiones de PostgreSQL compatibles con Cloud SQL

Para obtener información sobre el uso de una extensión específica, consulta el vínculo de documentación en una de las siguientes tablas.

La compatibilidad de Cloud SQL con extensiones de PostgreSQL se puede dividir en estas categorías:

PostGIS

La familia de extensiones de PostGIS 2.3 y la extensión de PostGIS 3.0 son compatibles con Cloud SQL, incluida la compatibilidad JSON-C. Entre estas, se incluyen las siguientes extensiones:

PostgreSQL 9.6 no es compatible con postgis. En PostgreSQL 11, se usa la versión 2.5.1. En PostgreSQL 12 y 13, se usa la versión 3.0.0.

La extensión postgis_sfcgal no es compatible.

Para obtener más información, consulta Instalación de PostGIS.

Extensiones de tipo de datos

Extensión Descripción
btree_gin Proporciona clases de operador GIN de muestra que implementan un comportamiento equivalente al árbol B.
btree_gist Proporciona clases de operadores de índice GiST que implementan un comportamiento equivalente al árbol B.
chkpass Implementa un tipo de datos chkpass diseñado para almacenar contraseñas encriptadas. No es compatible con PostgreSQL 12 para Cloud SQL.
citext Proporciona un tipo de string de caracteres sin distinción entre mayúsculas y minúsculas citext.
En PostgreSQL 9.6, se usa la versión 1.3. En PostgreSQL 11, se usa la versión 1.5. En PostgreSQL 12 y 13, se usa la versión 1.6.
cube Implementa un tipo de datos cube para representar cubos multidimensionales. En PostgreSQL 9.6, se usa la versión 1.2. En PostgreSQL 11, se usa la versión 1.3. En PostgreSQL 12 y 13, se usa la versión 1.4.
hstore Implementa el tipo de datos hstore para almacenar conjuntos de pares clave-valor en un valor PostgreSQL único. En PostgreSQL 9.6, se usa la versión 1.4. En PostgreSQL 11, se usa la versión 1.5. En PostgreSQL 12 y 13, se usa la versión 1.6.
isn Proporciona tipos de datos para algunos estándares de numeración de productos internacionales. En PostgreSQL 9.6, se usa la versión 1.1. En PostgreSQL 11, 12 y 13, se usa la versión 1.2.
ip4r Proporciona tipos de datos para direcciones IPv4/v6 y rangos de direcciones, además de compatibilidad con índices.
ltree Implementa un tipo de datos ltree para representar las etiquetas de datos que se almacenan en una estructura jerárquica en forma de árbol. En PostgreSQL 9.6, 11 y 12, se usa la versión 1.1. En PostgreSQL 13, se usa la versión 1.2.
lo Compatibilidad con la administración de objetos de gran tamaño (también conocidos como LO o BLOB). En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.1.
postgresql-hll Presenta un nuevo tipo de datos, hll, que es una estructura de datos HyperLogLog. Además, puedes consultar la siguiente sección postgresql-hll.
prefix Proporciona búsqueda de coincidencias de prefijos y compatibilidad con índices.

Extensiones de lenguaje

Extensión Descripción
plpgsql Un lenguaje de procedimiento que se puede cargar para crear funciones, procedimientos y activadores. También puedes usar este lenguaje para la ejecución directa de código en bloques DO. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.

Extensiones varias

Extensión Descripción
dblink Proporciona funciones para conectarse a las bases de datos de PostgreSQL desde una sesión de base de datos. Consulta también la sección dblink a continuación.
dict_int Un complemento de plantilla de diccionario para realizar búsquedas en el texto completo que controla la indexación de los números enteros.
earthdistance Proporciona dos métodos para calcular las distancias ortodrómicas en la superficie de la Tierra.
fuzzystrmatch Proporciona varias funciones para definir las similitudes y la distancia entre las strings.
intagg Proporciona un agregador de números enteros y un enumerador. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.1.
intarray Proporciona un conjunto de funciones y operadores para la manipulación de los arreglos de números enteros sin valores nulos y la realización de búsquedas indexadas en ellos. En PostgreSQL 9.6, 11 y 12, se usa la versión 1.2. En PostgreSQL 13, se usa la versión 1.3.
pageinspect Inspecciona el contenido de las páginas de la base de datos a un nivel bajo. Consulta también la siguiente sección pageinspect.
pgaudit Recopila datos de auditoría. Para obtener más información sobre el uso de esta extensión con Cloud SQL, consulta Auditoría de PostgreSQL con pgAudit.
pg_buffercache Proporciona un medio para examinar lo que sucede en la caché del búfer compartido en tiempo real. En PostgreSQL 9.6, se usa la versión 1.2. En PostgreSQL 10, 11, 12 y 13, se usa la versión 1.3.
pgfincore Un conjunto de funciones para administrar páginas en la memoria caché del disco del sistema operativo desde PostgreSQL. Consulta también la siguiente sección pgfincore.
pg_freespacemap Examina el mapa de espacio libre (FSM). Consulta también la siguiente sección pg_freespacemap.
pgcrypto Proporciona funciones criptográficas para PostgreSQL. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.3.
pgstattuple Proporciona varias funciones para obtener estadísticas a nivel de la tupla.
En PostgreSQL 9.6, se usa la versión 1.4. En PostgreSQL 11, 12 y 13, se usa la versión 1.5.
pg_repack Te permite quitar el sobredimensionamiento de índices y tablas. También, te permite realizar un CLÚSTER en línea (ordenar tablas por índice de clúster). Consulta también la siguiente sección pg_repack.
pgrowlocks Proporciona información de bloqueo de fila para la tabla específica. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.2.
pg_prewarm Proporciona una forma conveniente de cargar los datos de relación, ya sea en la caché del búfer del sistema operativo o en la caché del búfer de PostgreSQL. En PostgreSQL 9.6, se usa la versión 1.1. En PostgreSQL 10, 11, 12 y 13, se usa la versión 1.2.
pg_stat_statements Proporciona un medio para hacer un seguimiento de las estadísticas de ejecución de todas las instrucciones de SQL ejecutadas. En PostgreSQL 9.6, se usa la versión 1.4. En PostgreSQL 11, se usa la versión 1.6. En PostgreSQL 12, se usa la versión 1.7. En PostgreSQL 13, se usa la versión 1.8.
pg_trgm Proporciona funciones y operadores para determinar la similitud del texto alfanumérico según la coincidencia de trigramas, así como las clases de operadores de índice que admiten las búsquedas rápidas de strings similares. En PostgreSQL 9.6, se usa la versión 1.3. En PostgreSQL 11 y 12, se usa la versión 1.4. En PostgreSQL 13, se usa la versión 1.5.
pg_visibility Proporciona una forma de examinar el mapa de visibilidad (VM) y la información de visibilidad a nivel de la página de una tabla. Consulta también la siguiente sección pg_visibility.
PL/Proxy Controlador de lenguaje de procedimiento que permite realizar llamadas de procedimiento remoto entre bases de datos de PostgreSQL, con fragmentación opcional. Consulta también la siguiente sección PL/Proxy.
postgres_fdw Permite la creación de wrapper de datos externos dentro de las instancias o entre instancias. Consulta también la siguiente sección postgres_fdw.
sslinfo Proporciona información acerca del certificado SSL que proporcionó el cliente actual cuando se conectó a la instancia. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.2.
tablefunc Incluye varias funciones que muestran tablas (varias filas).
En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.
tsm_system_rows Proporciona el método de muestreo de tablas SYSTEM_ROWS, que se puede usar en la cláusula TABLESAMPLE de un comando SELECT. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.
tsm_system_time Proporciona el método de muestreo de tablas SYSTEM_TIME, que se puede usar en la cláusula TABLESAMPLE de un comando SELECT. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.
unaccent Un diccionario de búsqueda de textos que quita los acentos (signos diacríticos) de los lexemas. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.1.
uuid-ossp Proporciona funciones para generar identificadores únicos a nivel universal (UUID) mediante uno de varios algoritmos estándar. En PostgreSQL 9.6, 11, 12 y 13, se usa la versión 1.1.

Más información sobre algunas extensiones de PostgreSQL

En esta sección, se brinda más información sobre algunas de las extensiones de PostgreSQL compatibles en las tablas anteriores.

Desde una sesión de base de datos, puedes usar esta extensión para conectarte a las bases de datos de PostgreSQL y ejecutar consultas.

Por el momento, esta extensión funciona para dos instancias de IP privada de Cloud SQL dentro de la misma red de VPC o para varias bases de datos dentro de la misma instancia.

Para obtener más información, consulta la documentación.

Para conectarte a las bases de datos o a la misma instancia como un usuario distinto, debes especificar una contraseña. A modo de ejemplo (pero no para fines de producción), a continuación se muestra un fragmento de código:


  SELECT * FROM dblink (
    'dbname=name port=1234 host=host user=user password=password',
    'select id, name from table' \
  ) AS t(id int, name text);

Como alternativa, para configurar solo una conexión, aquí tienes un fragmento de código a modo de ejemplo (no para fines de producción):

  SELECT dblink_connect('dbname=dblinktest user=postgres host=name_or_ip password=xxx');

Para conectarte a la misma instancia como el mismo usuario, puedes conectarte sin contraseña. Por ejemplo:

  1. Establece la siguiente marca de base de datos para permitir las conexiones locales sin contraseña
    cloudsql.allow_passwordless_local_connections

  2. Conéctate sin especificar un host, lo que implica conectarte a la misma instancia. A continuación, se muestra un ejemplo:

    SELECT *
      FROM dblink('dbname=finance user=alice',
                  'select income from revenue')
        AS revenue(income integer);
    

    El resultado podría ser similar al siguiente:

          income
          --------
          1000
          (1 row)
    

Para conectarte a otras bases de datos alojadas en la misma instancia, no puedes configurar el host en localhost ni en 127.0.0.1. En su lugar, debes usar la dirección IP que se muestra para la instancia en Google Cloud Console.

Consulta también postgres_fdw y PL/Proxy.

pageinspect

Esta extensión inspecciona el contenido de las páginas bases de datos en un nivel bajo. Consulta la documentación para obtener detalles específicos de la versión.

pgfincore

Esta extensión contiene funciones para administrar las páginas en la memoria de caché del disco del sistema operativo de PostgreSQL. Consulta la documentación para obtener detalles específicos de la versión.

pg_freespacemap

Esta extensión examina el mapa de espacio libre (FSM). Consulta la documentación para obtener detalles específicos de la versión.

pg_repack

Con esta extensión, puedes quitar el sobredimensionamiento de las tablas y los índices. Además, puedes usar esta extensión para realizar un CLÚSTER en línea (ordenar tablas según el índice del clúster). Los detalles específicos de la versión se encuentran en la documentación. Además, para usar esta extensión en Cloud SQL, se necesita un procedimiento especial a fin de agregar privilegios a un usuario.

Como se describió antes, cuando creas una instancia nueva de PostgreSQL, se crea el usuario de postgres predeterminado (pero debes establecer la contraseña). Ese usuario de postgres predeterminado es parte de la función cloudsqlsuperuser. Si un usuario que no es cloudsqlsuperuser quiere usar una extensión, debes agregar los privilegios. En el siguiente ejemplo, se usa el comando grant para agregar los privilegios necesarios.

Ejemplo de cómo agregar privilegios

A modo de ejemplo, csuper1 es un cloudsqlsuperuser y testdb es una base de datos que pertenece a testuser. Para crear la extensión pg_repack en testdb, ejecuta primero los siguientes comandos:

  1. Conéctate a testdb como cloudsqlsuperuser:

    psql -U csuper1 -d testdb;
    
  2. Otorga la función de propietario de la base de datos, que es testuser,, a csuper1:

    GRANT testuser TO csuper1;
    
  3. Crea una extensión:

    CREATE EXTENSION pg_repack;
    
  4. Revoca la asignación que realizaste en el paso 2:

     REVOKE testuser FROM csuper1;
    
  5. Ejecuta el comando pg_repack en una tabla, por ejemplo t1 en testdb, como csuper1:

    pg_repack -h <hostname> -d testdb -U csuper1 -k -t t1
    

El comando pg_repack puede fallar con el siguiente error:
"ERROR: query failed: SSL SYSCALL error: EOF detected"

Si se produce ese error, intenta configurar keepalives de TCP en un valor menor y, luego, ejecuta el comando pg_repack. Para obtener más información, consulta Conexiones de Compute Engine.

pg_visibility

Esta extensión proporciona una forma de examinar el mapa de visibilidad (VM) y la información de visibilidad a nivel de la página de una tabla. Consulta la documentación para obtener detalles específicos de la versión.

PL/Proxy

Esta extensión es un controlador de lenguaje de procedimiento que permite llamadas de procedimiento remoto entre bases de datos de PostgreSQL, con fragmentación opcional.

Consulta la documentación para obtener detalles específicos de la versión. PL/Proxy 2.9 es compatible con PostgreSQL 11 y 12.

Las instancias de destino para las conexiones deben estar en la misma red de VPC que la instancia de conexión. Además, en Google Cloud Console, no puedes elegir el botón Solo permitir conexiones SSL para instancias de clústeres.

Para conectarte a otras bases de datos alojadas en la misma instancia, no puedes configurar el host en localhost ni en 127.0.0.1. En su lugar, debes usar la dirección IP que se muestra para la instancia en Google Cloud Console.

Consulta también postgres_fdw y dblink.

postgres_fdw

Esta extensión permite que las tablas de otras bases de datos PostgreSQL (“externas”) se expongan como tablas “externas” en la base de datos actual. Esas tablas están disponibles para que se usen, casi como si fueran tablas locales. Consulta la documentación para obtener detalles específicos de la versión.

Por el momento, esta extensión funciona para dos instancias de IP privada de Cloud SQL dentro de la misma red de VPC o para varias bases de datos dentro de la misma instancia.

Para conectarte a otras bases de datos alojadas en la misma instancia, no puedes establecer el host en localhost ni en 127.0.0.1. En su lugar, debes usar la dirección IP que se muestra para tu instancia en Google Cloud Console.

Además, en Google Cloud Console, no puedes elegir el botón Solo permitir conexiones SSL para una instancia en la que se almacenan datos externos. Solo cloudsqlsuperuser puede ser el propietario de un wrapper de datos externo de postgres_fdw.

Consulta también PL/Proxy y dblink.

postgresql-hll

Esta extensión ingresa un tipo de datos nuevo, hll, que es una estructura de datos HyperLogLog. Consulta la documentación para obtener detalles específicos de la versión.