As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Integração compatível com o Aurora PostgreSQL com bancos de dados PostgreSQL remotos
Esta seção discute a integração da edição compatível com o Amazon Aurora PostgreSQL com bancos postgres_fdw
de dados PostgreSQL remotos usando a extensão (wrapper de dados estrangeiros) ou o recurso. dblink
O postgres_fdw
módulo fornece capacidade de consulta federada para interagir com bancos de dados remotos baseados em PostgreSQL. Os bancos de dados remotos podem ser gerenciados ou autogerenciados na Amazon EC2 ou localmente. A postgres_fdw
extensão está disponível em todas as versões atualmente compatíveis do Amazon Relational Database Service (Amazon RDS) para PostgreSQL e Aurora PostgreSQL.
Usando a postgres_fdw
extensão, você pode acessar e consultar dados de bancos de dados PostgreSQL remotos como se fossem tabelas locais. A postgres_fdw
extensão também oferece suporte ao seguinte:
-
Compatibilidade entre versões para acessar dados de servidores PostgreSQL externos que estão executando versões diferentes.
-
Gerenciamento de transações, que ajuda a garantir a consistência e a integridade dos dados ao realizar operações em servidores PostgreSQL locais e externos.
-
Transações distribuídas, que fornecem atomicidade (uma propriedade das transações ACID) e garantias de isolamento quando você executa operações em vários servidores PostgreSQL externos. Isso ajuda a garantir que todas as operações em uma transação sejam confirmadas ou nenhuma, mantendo a consistência e a integridade dos dados.
Embora o dblink
módulo forneça uma maneira de interagir com bancos de dados PostgreSQL remotos, ele não oferece suporte a transações distribuídas ou outros recursos avançados. Se você precisar de funcionalidades mais avançadas, considere usar a postgres_fdw
extensão em vez disso. A postgres_fdw
extensão oferece mais recursos de integração e otimização.
Casos de uso e etapas de alto nível do postgres_fdw
O uso da postgres_fdw
extensão com o Aurora compatível com PostgreSQL é compatível com os seguintes casos de uso e cenários:
-
Consultas federadas e integração de dados ‒ Consulta e combinação de dados de vários bancos de dados PostgreSQL em uma única instância compatível com o Aurora PostgreSQL
-
Descarregando cargas de trabalho de leitura ‒ Conectando-se a réplicas de leitura de servidores PostgreSQL externos, descarregando cargas de trabalho com muita leitura e melhorando o desempenho das consultas
-
Operações entre bancos de dados ‒ Execução
INSERT
,UPDATE
DELETE
, eCOPY
operações em vários bancos de dados PostgreSQL, permitindo tarefas de manipulação e manutenção de dados entre bancos de dados
Para configurarpostgres_fdw
, use as seguintes etapas de alto nível:
-
Conecte-se ao seu cluster compatível com o Aurora PostgreSQL usando um cliente PostgreSQL e crie a extensão:
postgres_fdw
CREATE EXTENSION postgres_fdw;
Essa extensão fornece a funcionalidade de conexão com bancos de dados PostgreSQL remotos.
-
Crie um servidor externo chamado
my_fdw_target
usando oCREATE SERVER
comando. Esse servidor representa o banco de dados PostgreSQL remoto ao qual você deseja se conectar. Especifique o nome do banco de dados, o nome do host e o modo SSL como opções para esse servidor. -
Certifique-se de que os grupos de segurança e as configurações de rede necessários estejam prontos para permitir que o Aurora, compatível com o PostgreSQL, se conecte ao banco de dados PostgreSQL remoto.
Se o banco de dados remoto estiver hospedado no local, talvez seja necessário configurar uma rede privada virtual (VPN) ou AWS Direct Connect conexão.
Execute o seguinte comando:
CREATE SERVER my_fdw_target Foreign Data Wrapper postgres_fdw OPTIONS (DBNAME 'postgres', HOST 'SOURCE_HOSTNAME', SSLMODE 'require');
-
Crie um mapeamento de usuário para o
dbuser
usuário nomy_fdw_target
servidor. Esse mapeamento associa odbuser
usuário e a senha na instância local compatível com o Aurora PostgreSQL ao usuário correspondente no banco de dados remoto.CREATE USER MAPPING FOR dbuser SERVER my_fdw_target OPTIONS (user 'DBUSER', password 'PASSWORD');
Essa etapa é necessária para autenticar e fornecer acesso ao banco de dados remoto.
-
Crie uma tabela externa nomeada
customer_fdw
com o mapeamento domy_fdw_target
servidor e do usuário que você configurou anteriormente:CREATE FOREIGN TABLE customer_fdw( id int, name varchar, emailid varchar, projectname varchar, contactnumber bigint) server my_fdw_target OPTIONS( TABLE_NAME 'customers');
A
customer_fdw
tabela é mapeada para acustomers
tabela no banco de dados remoto especificado pelomy_fdw_target
servidor. A tabela externa tem a mesma estrutura da tabela remota para que você possa interagir com os dados remotos como se fossem uma tabela local. -
Você pode realizar várias operações de manipulação de dados na tabela
customer_fdw
externa, comoINSERT
UPDATE
, eSELECT
consultas. O script demonstra a inserção de uma nova linha e a atualização de uma linha existente, a exclusão de um registro e o truncamento de uma tabela na tabela remota por meio dacustomers
tabela externa:customer_fdw
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;
-
Você pode validar um plano de consulta SQL usando a
EXPLAIN
instrução para analisar o plano de consulta de umaSELECT
consulta nacustomer_fdw
tabela:EXPLAIN select * from customer_fdw where id =1;
Isso pode ajudar você a entender como a consulta está sendo executada e como otimizá-la. Para obter mais informações sobre como usar a
EXPLAIN
declaração, consulte Otimizando o desempenho da consulta do PostgreSQL em Orientação prescritiva. AWS -
Para importar várias tabelas do banco de dados remoto para um esquema local, use o
IMPORT FOREIGN SCHEMA
comando:CREATE SCHEMA public_fdw; IMPORT FOREIGN SCHEMA public LIMIT TO (employees, departments) FROM SERVER my_fdw_target INTO public_fdw;
Isso cria tabelas externas locais para tabelas especificadas no
public_fdw
esquema. Neste exemplo, as tabelas específicas são funcionários e departamentos. -
Para conceder as permissões necessárias a um usuário específico do banco de dados para que ele possa acessar e usar o FDW e o servidor externo associado, execute os seguintes comandos:
GRANT USAGE ON FOREIGN SERVER my_fdw_target TO targetdbuser; GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO targetdbuser;
Essa etapa pode ser benéfica quando vários usuários exigem acesso às tabelas externas facilitado pelo wrapper de dados externo.
Ao usar tabelas externas, esteja ciente das seguintes limitações:
-
O acesso aos dados de uma fonte remota pode gerar custos de transferência de dados e sobrecarga de desempenho causados pela latência da rede. Problemas de desempenho podem ser notados em grandes conjuntos de dados ou consultas que exigem uma transferência significativa de dados entre a instância compatível com o Aurora PostgreSQL e a fonte de dados remota.
-
Em consultas complexas que envolvem recursos como funções de janela, as consultas recursivas podem não funcionar conforme o esperado ou podem não ser suportadas.
-
Atualmente, a criptografia de senha não é suportada. Implemente controles para garantir que somente usuários autorizados possam acessar FDWs e recuperar dados de bancos de dados remotos.
-
As restrições de chave primária não podem ser definidas em tabelas externas, conforme demonstrado pela seguinte tentativa de script de criação de tabela:
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
-
A
ON CONFLICT
cláusula paraINSERT
declarações não é suportada em tabelas externas, conforme mostrado no exemplo a seguir: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.
Limpeza
Para limpar os objetos criados, incluindo eliminar a postgres_fdw
extensão, o my_fdw_target
servidor, os mapeamentos do usuário e as tabelas externas, execute os seguintes comandos:
DROP FOREIGN TABLE customer_fdw; DROP USER MAPPING for postgres; DROP SERVER my_fdw_target; DROP EXTENSION postgres_fdw cascade;
Usando o dblink para criar conexões
As funções do dblink
módulo fornecem uma forma alternativa de criar conexões e executar instruções SQL em bancos de dados PostgreSQL remotos. A dblink
solução é uma maneira mais simples e flexível de executar consultas ou operações únicas em bancos de dados remotos. Para cenários mais complexos que envolvem integração de dados em grande escala, otimização de desempenho e requisitos de integridade de dados, recomendamos o uso. postgres_fdw
O uso dblink
envolve as seguintes etapas de alto nível:
-
Crie a
dblink
extensão:CREATE EXTENSION dblink;
Essa extensão fornece a funcionalidade de conexão com bancos de dados PostgreSQL remotos.
-
Para estabelecer uma conexão com um banco de dados PostgreSQL remoto, use a função:
dblink_connect
SELECT dblink_connect('myconn', 'dbname=postgres port=5432 host=SOURCE_HOSTNAME user=postgres password=postgres');
-
Depois de se conectar ao banco de dados PostgreSQL remoto, execute instruções SQL no banco de dados remoto usando funções:
dblink
SELECT FROM dblink('myconn', 'SELECT col1, col2 FROM remote_table') AS remote_data(col1 int, col2 text);
Essa consulta executa a
SELECT * FROM remote_table
instrução no banco de dados remoto usando amyconn
conexão. A consulta recupera os resultados em uma tabela temporária local com colunascol1
e.col2
-
Você também pode executar instruções que não sejam de consulta
INSERT
, comoUPDATE
, ouDELETE
, no banco de dados remoto usando adblink_exec
função:SELECT dblink_exec('myconn', 'INSERT INTO remote_table VALUES (1, ''value'')');