

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Integración compatible con Aurora PostgreSQL con bases de datos PostgreSQL remotas
<a name="remote-postgresql-databases"></a>

En esta sección, se describe la integración de la edición compatible con PostgreSQL de Amazon Aurora con bases de datos PostgreSQL remotas mediante la extensión `postgres_fdw` (contenedor de datos externos) o la función. `dblink` El `postgres_fdw` módulo proporciona la capacidad de consulta federada para interactuar con bases de datos remotas basadas en PostgreSQL. Las bases de datos remotas se pueden gestionar o autogestionar en [Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) EC2 o de forma local. La `postgres_fdw` extensión está disponible en todas las versiones compatibles actualmente de Amazon Relational Database Service (Amazon RDS) para PostgreSQL y Aurora compatibles con PostgreSQL.

Con la `postgres_fdw` extensión, puede acceder a los datos de bases de datos PostgreSQL remotas y consultarlos como si fueran tablas locales. La `postgres_fdw` extensión también admite lo siguiente:
+ Compatibilidad entre versiones para acceder a los datos de servidores PostgreSQL externos que ejecutan versiones diferentes.
+ Gestión de transacciones, que ayuda a garantizar la coherencia e integridad de los datos al realizar operaciones en servidores PostgreSQL locales y externos.
+ Transacciones distribuidas, que proporcionan atomicidad (una propiedad de las transacciones ACID) y garantías de aislamiento cuando se realizan operaciones en varios servidores PostgreSQL externos. Esto ayuda a garantizar que todas las operaciones de una transacción se confirmen o que no se confirme ninguna, manteniendo la coherencia y la integridad de los datos.

Aunque el `dblink` módulo proporciona una forma de interactuar con bases de datos PostgreSQL remotas, no admite transacciones distribuidas ni otras funciones avanzadas. Si necesita una funcionalidad más avanzada, considere usar la `postgres_fdw` extensión en su lugar. La `postgres_fdw` extensión proporciona más capacidades de integración y optimización.

## Casos de uso y pasos de alto nivel de postgres\_fdw
<a name="postgres-fdw"></a>

El uso `postgres_fdw` de la extensión con Aurora compatible con PostgreSQL admite los siguientes casos de uso y escenarios:
+ **Consultas federadas e integración de datos** ‒ Consulta y combinación de datos de varias bases de datos de PostgreSQL en una única instancia compatible con Aurora PostgreSQL
+ **Descarga de cargas de trabajo de lectura ‒ Conexión a réplicas de lectura de servidores PostgreSQL externos, descarga** de cargas de trabajo de lectura intensiva y mejora del rendimiento de las consultas
+ **Operaciones entre bases de datos**: ejecución y `COPY` operaciones en varias bases de datos PostgreSQL `INSERT` `UPDATE``DELETE`, lo que permite realizar tareas de mantenimiento y manipulación de datos entre bases de datos

Para configurarlo`postgres_fdw`, siga los siguientes pasos generales:

1. Conéctese a su clúster compatible con PostgreSQL de Aurora mediante un cliente PostgreSQL y cree la extensión: `postgres_fdw`

   ```
   CREATE EXTENSION postgres_fdw;
   ```

   Esta extensión proporciona la funcionalidad para conectarse a bases de datos PostgreSQL remotas.

1. Cree un servidor externo con un nombre `my_fdw_target` mediante el `CREATE SERVER` comando. Este servidor representa la base de datos PostgreSQL remota a la que desea conectarse. Especifique el nombre de la base de datos, el nombre de host y el modo SSL como opciones para este servidor.

1. Asegúrese de que los grupos de seguridad y las configuraciones de red necesarios estén implementados para permitir que Aurora, compatible con PostgreSQL, se conecte a la base de datos remota de PostgreSQL.

   Si la base de datos remota está alojada en las instalaciones, es posible que deba configurar una red privada virtual (VPN) o una conexión. AWS Direct Connect 

   Use el siguiente comando:

   ```
   CREATE SERVER my_fdw_target Foreign Data Wrapper postgres_fdw OPTIONS (DBNAME 'postgres', HOST 'SOURCE_HOSTNAME', SSLMODE 'require');
   ```

1. Cree un mapeo de usuarios para el `dbuser` usuario en el `my_fdw_target` servidor. Esta asignación asocia el `dbuser` usuario y la contraseña de la instancia local compatible con Aurora PostgreSQL con el usuario correspondiente de la base de datos remota.

   ```
   CREATE USER MAPPING FOR dbuser SERVER my_fdw_target OPTIONS (user 'DBUSER', password 'PASSWORD');
   ```

   Este paso es necesario para autenticar y proporcionar acceso a la base de datos remota.

1. Cree una tabla externa `customer_fdw` con el nombre del mapeo de `my_fdw_target` servidores y usuarios que configuró anteriormente:

   ```
   CREATE FOREIGN TABLE customer_fdw( id int, name varchar, emailid varchar, projectname varchar, contactnumber bigint) server my_fdw_target OPTIONS( TABLE_NAME 'customers');
   ```

   La `customer_fdw` tabla se asigna a la `customers` tabla de la base de datos remota especificada por el `my_fdw_target` servidor. La tabla externa tiene la misma estructura que la tabla remota, por lo que puede interactuar con los datos remotos como si se tratara de una tabla local.

1. Puede realizar diversas operaciones de manipulación de datos en la tabla `customer_fdw` externa`INSERT`, como`UPDATE`, y `SELECT` consultas. El script muestra cómo insertar una nueva fila y actualizar una fila existente, eliminar un registro y truncar una tabla de la tabla remota a través de la `customers` tabla `customer_fdw` externa:

   ```
   INSERT INTO customer_fdw values ( 1, 'Test1', 'Test1@email.com', 'LMS1', '888888888');
   INSERT INTO customer_fdw values ( 2, 'Test2', 'Test2@email.com', 'LMS2', '999999999');
   INSERT INTO customer_fdw values ( 3, 'Test3', 'Test3@email.com', 'LMS3', '111111111');
   UPDATE customer_fdw set contactnumber = '123456789' where id = 2;
   DELETE FROM customer_fdw where id = 1;
   TRUNCATE TABLE customer_fdw;
   ```

1. Puede validar un plan de consultas SQL utilizando la `EXPLAIN` instrucción para analizar el plan de consultas de una `SELECT` consulta de la `customer_fdw` tabla:

   ```
   EXPLAIN select * from customer_fdw where id =1;
   ```

   Esto puede ayudarle a entender cómo se ejecuta la consulta y cómo optimizarla. Para obtener más información sobre el uso de la `EXPLAIN` declaración, consulte [Optimización del rendimiento AWS de las consultas de PostgreSQL](https://docs.aws.amazon.com/prescriptive-guidance/latest/postgresql-query-tuning/introduction.html) en Prescriptive Guidance.

1. Para importar varias tablas de la base de datos remota a un esquema local, utilice el comando: `IMPORT FOREIGN SCHEMA`

   ```
   CREATE SCHEMA public_fdw;
   IMPORT FOREIGN SCHEMA public LIMIT TO (employees, departments)
       FROM SERVER my_fdw_target INTO public_fdw;
   ```

   Esto crea tablas externas locales para las tablas especificadas del `public_fdw` esquema. En este ejemplo, las tablas específicas son empleados y departamentos.

1. Para conceder los permisos necesarios a un usuario de base de datos específico para que pueda acceder y utilizar el FDW y el servidor externo asociado, ejecute los siguientes comandos:

   ```
   GRANT USAGE ON FOREIGN SERVER my_fdw_target TO targetdbuser;
   GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO targetdbuser;
   ```

   Este paso puede resultar beneficioso cuando varios usuarios necesitan acceder a las tablas externas facilitadas por el contenedor de datos externo.

Cuando utilice tablas externas, tenga en cuenta las siguientes limitaciones:
+ El acceso a los datos desde una fuente remota puede generar costos de transferencia de datos y sobrecargar el rendimiento debido a la latencia de la red. Los problemas de rendimiento pueden notarse en consultas o conjuntos de datos de gran tamaño que requieren una transferencia de datos significativa entre la instancia compatible con Aurora PostgreSQL y la fuente de datos remota.
+ En consultas complejas que incluyen características como funciones de ventana, es posible que las consultas recursivas no funcionen según lo esperado o que no sean compatibles.
+ Actualmente, no se admite el cifrado por contraseña. Implemente controles para garantizar que solo los usuarios autorizados puedan acceder a las bases de datos remotas FDWs y recuperarlos de ellas.
+ Las restricciones clave principales no se pueden definir en tablas externas, como lo demuestra el siguiente intento de guion de creación de tablas:

  ```
  CREATE FOREIGN TABLE customer_fdw2( id int primary key, name varchar, emailid varchar, projectname varchar, contactnumber bigint) server my_fdw_target OPTIONS( TABLE_NAME 'customers');
  Primary keys cannot be defined on Foreign table
  ```
+ La `ON CONFLICT` cláusula para `INSERT` las declaraciones no se admite en las tablas externas, como se muestra en el siguiente ejemplo:

  ```
  INSERT INTO customer_fdw (id, name, emailid, projectname, contactnumber) VALUES
  (1, 'test1', 'test@email.com', 'LMS', 11111111 ),
  (3, 'test3', 'test3@email.com', 'LMS', 22222222 )
  ON CONFLICT (id) DO UPDATE 
  SET name = EXCLUDED.name;
  On Conflict option doesnot work.
  ```

### Limpieza
<a name="postgresql-cleanup"></a>

Para limpiar los objetos creados, incluida la eliminación de la `postgres_fdw` extensión, el `my_fdw_target` servidor, las asignaciones de usuarios y las tablas externas, ejecute los siguientes comandos:

```
DROP FOREIGN TABLE customer_fdw;
DROP USER MAPPING for postgres;
DROP SERVER  my_fdw_target;
DROP EXTENSION postgres_fdw cascade;
```

## Uso de dblink para crear conexiones
<a name="dblink"></a>

Las funciones del `dblink` módulo proporcionan una forma alternativa de crear conexiones y ejecutar sentencias SQL en bases de datos PostgreSQL remotas. La `dblink` solución es una forma más sencilla y flexible de ejecutar consultas u operaciones únicas en bases de datos remotas. Para escenarios más complejos que impliquen requisitos de integración de datos a gran escala, optimización del rendimiento e integridad de los datos, recomendamos `postgres_fdw` utilizarla.

`dblink`El uso implica los siguientes pasos de alto nivel:

1. Cree la extensión `dblink`:

   ```
   CREATE EXTENSION dblink;
   ```

   Esta extensión proporciona la funcionalidad para conectarse a bases de datos PostgreSQL remotas.

1. Para establecer una conexión a una base de datos PostgreSQL remota, utilice la función: `dblink_connect`

   ```
   SELECT dblink_connect('myconn', 'dbname=postgres port=5432 host=SOURCE_HOSTNAME user=postgres password=postgres');
   ```

1. Tras conectarse a la base de datos PostgreSQL remota, ejecute las sentencias SQL en la base de datos remota mediante las funciones: `dblink`

   ```
   SELECT  FROM dblink('myconn', 'SELECT col1, col2 FROM remote_table') AS remote_data(col1 int, col2 text);
   ```

   Esta consulta ejecuta la `SELECT * FROM remote_table` sentencia en la base de datos remota mediante la `myconn` conexión. La consulta recupera los resultados en una tabla temporal local con columnas `col1` y`col2`.

1. También puede ejecutar sentencias que no sean de consulta, como`INSERT`, o `UPDATE``DELETE`, en la base de datos remota mediante la `dblink_exec` función:

   ```
   SELECT dblink_exec('myconn', 'INSERT INTO remote_table VALUES (1, ''value'')');
   ```