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:
- En la herramienta psql, ejecuta el comando CREATE EXTENSION.
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.
dblink
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.
Usa dblink para conectarte con contraseña
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');
Usa dblink para conectarte sin contraseña
Para conectarte a la misma instancia como el mismo usuario, puedes conectarte sin contraseña. Por ejemplo:
Establece la siguiente marca de base de datos para permitir las conexiones locales sin contraseña
cloudsql.allow_passwordless_local_connections
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:
Conéctate a
testdb
comocloudsqlsuperuser
:psql -U csuper1 -d testdb;
Otorga la función de propietario de la base de datos, que es
testuser,
, acsuper1
:GRANT testuser TO csuper1;
Crea una extensión:
CREATE EXTENSION pg_repack;
Revoca la asignación que realizaste en el paso 2:
REVOKE testuser FROM csuper1;
Ejecuta el comando
pg_repack
en una tabla, por ejemplot1
entestdb
, comocsuper1
: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.