¿Puedes realizar consultas entre bases de datos con PostgreSQL? ¡Aquí te mostramos cómo!

Si estás trabajando con PostgreSQL, puedes preguntarte si es posible realizar consultas entre bases de datos. Esto generalmente surge cuando necesitas acceder o manipular datos que están particionados entre diferentes bases de datos. Una situación común es cuando dos bases de datos comparten datos pero están configuradas por separado, lo que lleva a la pregunta: ¿Puedes consultar una base de datos desde otra en PostgreSQL?

El Desafío de las Consultas entre Bases de Datos

Puedes encontrarte con un mensaje de error similar a este al intentar ejecutar una consulta entre bases de datos:

databaseA=# select * from databaseB.public.someTableName;
ERROR:  las referencias entre bases de datos no están implementadas: "databaseB.public.someTableName"

Este error indica que PostgreSQL no admite de forma nativa referencias directas entre bases de datos. Por lo tanto, si tus datos están almacenados en bases de datos separadas y necesitas realizar consultas entre ellas, necesitarás una solución alternativa.

La Solución: Utilizando Envolturas de Datos Externas

Para realizar consultas entre bases de datos en PostgreSQL, puedes utilizar la función envoltura de datos externa, específicamente postgres_fdw. Esto te permite conectarte fácilmente a tablas en cualquier base de datos PostgreSQL, ya sea local o remota.

Configurando postgres_fdw

  1. Instala la Extensión: Asegúrate de que la extensión postgres_fdw esté habilitada en tu instalación de PostgreSQL. Puedes crear la extensión con el siguiente comando:

    CREATE EXTENSION postgres_fdw;
    
  2. Define un Servidor Externo: Crea un servidor externo que se conecte a la base de datos de destino:

    CREATE SERVER foreign_server_name
    FOREIGN DATA WRAPPER postgres_fdw
    OPTIONS (host 'host_address', dbname 'databaseB', port '5432');
    
  3. Crea un Mapeo de Usuario: Necesitarás crear un mapeo para que el usuario se conecte al servidor externo:

    CREATE USER MAPPING FOR local_user
    SERVER foreign_server_name
    OPTIONS (user 'remote_user', password 'remote_password');
    
  4. Importa el Esquema Externo: Puedes importar el esquema externo que contiene las tablas a las que deseas acceder:

    IMPORT FOREIGN SCHEMA public
    FROM SERVER foreign_server_name
    INTO local_schema;
    
  5. Consulta la Tabla Remota: Ahora puedes consultar las tablas externas como si fueran tablas locales regulares:

    SELECT * FROM local_schema.some_table_name;
    

Para Versiones Más Antiguas de PostgreSQL

Si estás utilizando una versión de PostgreSQL anterior a 9.3, la función de envoltura de datos externa no está disponible. Sin embargo, puedes utilizar la función dblink, que te permite conectarte a otras bases de datos de PostgreSQL.

  • Usando dblink: Necesitarás instalar el paquete postgresql-contrib si no forma parte de tu distribución. Luego puedes ejecutar una consulta como esta:
    SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password',
                        'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
    

Nota: Siempre considera reestructurar tus bases de datos si es posible. Usar esquemas dentro de la misma base de datos en lugar de bases de datos separadas puede mejorar significativamente la gestión y accesibilidad de los datos.

Conclusión

Si bien PostgreSQL no admite de forma nativa consultas entre bases de datos, el uso de envolturas de datos externas como postgres_fdw proporciona una solución poderosa. Al configurar las configuraciones necesarias, puedes acceder y manipular datos entre diferentes bases de datos sin inconvenientes.

Si estás utilizando una versión más antigua, ten en cuenta que, aunque dblink es una opción, actualizar a las últimas versiones de PostgreSQL puede proporcionar mejor funcionalidad y soporte.

Con las herramientas y estrategias adecuadas, acceder a datos entre bases de datos es más fácil que nunca. ¡Felices consultas!