Ativar o Acesso entre Bancos de Dados no OCI Database with PostgreSQL usando as Extensões postgres_fdw e dblink
Introdução
O Oracle Cloud Infrastructure Database com PostgreSQL (OCI Database with PostgreSQL) suporta conectividade entre bancos de dados usando extensões como postgres_fdw e dblink. Essas extensões permitem acesso contínuo e compartilhamento de dados entre bancos de dados PostgreSQL, úteis para análises, consultas federadas ou cenários de integração legados.
O que é o dblink?
DBlink é uma extensão PostgreSQL que permite a execução direta de instruções SQL em um banco de dados PostgreSQL remoto. Ele retorna conjuntos de resultados como linhas ou executa comandos no servidor remoto.
O que é o postgres_fdw?
postgres_fdw (Foreign Data Wrapper) é uma extensão PostgreSQL que permite a um banco de dados estabelecer conexão com tabelas e consultá-las em um servidor PostgreSQL remoto como se fossem tabelas locais. Ao contrário do dblink, ele mapeia tabelas remotas como objetos locais e oferece mais controle procedural.
Neste tutorial, vamos explorar a configuração das extensões postgres_fdw e dblink em uma instância do OCI Database with PostgreSQL, juntamente com exemplos para cada uma.
Objetivos
Para permitir uma comunicação de rede segura e confiável entre dois sistemas de banco de dados do OCI Database with PostgreSQL localizados em redes virtuais na nuvem (VCNs) diferentes e regiões diferentes. Essa configuração garante que as conexões de banco de dados funcionem perfeitamente entre os limites da VCN. Inclui a configuração de LPGs (Local Peering Gateways) para roteamento e a configuração da resolução de DNS usando views privadas. O objetivo é oferecer suporte à conectividade entre VCN/região para extensões de banco de dados como postgres_fdw ou dblink.
Pré-requisitos
- Para criar e gerenciar as extensões postgres_fdw ou dblink em um banco de dados OCI Database with PostgreSQL, o usuário deve ter:
- Privilégios de acesso ao banco de dados.
- O OCI_ADMIN_ROLE concedido ao usuário.
- O OCI Database with PostgreSQL (origem e destino) deve ter conectividade de rede.
Tarefa 1: Ativar a Extensão postgres_fdw e dblink no OCI Database with PostgreSQL
-
Ativar a Extensão na Console do OCI.
-
Crie um arquivo de configuração que ative a extensão dblink ou postgres_fdw.
-
Aplique a configuração ao sistema de banco de dados.
-
-
Ative a Extensão no Nível do Banco de Dados.
Após ativar a extensão na Console do OCI, conecte-se ao banco de dados e execute o comando SQL a seguir.
CREATE EXTENSION postgres_fdw; CREATE EXTENSION dblink;
Tarefa 2: Configurar a Conectividade de Rede entre Sistemas de Banco de Dados em VCNs Diferentes
Para permitir a comunicação entre dois sistemas de banco de dados do OCI Database with PostgreSQL localizados em VCNs diferentes, siga as etapas:
-
Criar LPGs (Local Peering Gateways).
Crie um LPG em cada VCN para estabelecer uma conexão de pareamento entre eles.
-
Configurar Tabelas de Roteamento.
-
Para cada VCN, atualize a tabela de roteamento associada ao LPG para incluir uma regra de roteamento.
-
Defina o bloco CIDR de destino para a faixa de endereços da outra VCN de destino e especifique o próximo salto como o LPG correspondente.
-
-
Configurar a Resolução de DNS Usando Views Privadas.
-
Vá para a Console do OCI e procure Views Privadas para acessar a configuração de DNS para ambas as VCNs.
-
Abra a view privada de cada VCN e crie uma entrada de zona.
-
-
Criar um Registro de Zona para Cada Sistema de Banco de Dados.
Na view privada de cada VCN, adicione uma zona que represente o FQDN (Nome de Domínio Totalmente Qualificado) do sistema de banco de dados na outra VCN.
-
Adicionar Registros de DNS.
-
Clique no ícone de três pontos ao lado da nova entrada de zona ou clique no link FQDN.
-
Selecione Gerenciar Registros e clique em Adicionar Registro.
-
Selecione Tipo A (IPv4 Endereço), defina TTL como 500 e informe o Endereço IP do ponto final principal do sistema de banco de dados de destino na VCN oposta.
-
Clique em Adicionar Registro e em Publicar Alterações.
-
Tarefa 3: Configurar a Conectividade de Rede entre Sistemas de Banco de Dados em VCNs Diferentes e em Região Diferente
Para permitir a comunicação entre dois sistemas de banco de dados OCI Database with PostgreSQL localizados em diferentes VCNs e regiões diferentes.
-
Criar DRGs (Dynamic Routing Gateways).
Crie um DRG em cada região, anexando-o à respectiva VCN.
-
Configurar Tabelas de Roteamento.
-
Para cada VCN, atualize a tabela de roteamento associada ao DRG.
-
Adicione uma regra de roteamento com o bloco CIDR de destino da outra VCN, especificando o próximo salto como o DRG anexado.
-
-
Configurar a Resolução de DNS Usando Views Privadas.
-
Vá para a Console do OCI e procure Views Privadas para acessar as definições de DNS de cada VCN.
-
Abra a view privada de cada VCN e crie uma entrada de zona.
-
-
Criar um Registro de Zona para Cada Sistema de Banco de Dados.
Na view privada de cada VCN, adicione uma zona que represente o FQDN do Sistema de banco de dados na outra VCN.
-
Adicionar Registros de DNS.
-
Clique no ícone de três pontos ao lado da nova entrada de zona ou clique no link FQDN.
-
Selecione Gerenciar Registros e clique em Adicionar Registro.
-
Selecione Tipo A (IPv4 Endereço), defina TTL como 500 e informe o Endereço IP do ponto final principal do sistema de banco de dados oposto.
-
Clique em Adicionar Registro e em Publicar Alterações.
-
Tarefa 4: Configurar a extensão postgres_fdw com um exemplo
-
Criar Servidor FDW (Foreign Data Wrapper).
O comando
CREATE SERVER
define um servidor externo chamadofdw_serv
usando o encapsuladorpostgres_fdw
. Especifica os detalhes da conexão, como host, nome do banco de dados e porta do banco de dados de origem PostgreSQL. Isso atua como uma referência lógica para acessar dados de origem na instância de destino PostgreSQL.CREATE SERVER <fdw_servername> FOREIGN DATA WRAPPER <fdw_servername> OPTIONS (host 'primary.xxxxxx.FQDN_Remote_source_DBSystem.... oci.oraclecloud.com', dbname 'remote_source_dbname', port '5432');
-
mapear o Usuário.
O comando
CREATE USER MAPPING
associa um usuário PostgreSQL de destino (arvindya
) às credenciais do banco de dados de origem. Isso permite a autenticação de destino quando o servidor de destino se conecta ao servidor externo definido. Ele garante que as consultas executadas no destino estejam devidamente autorizadas no servidor de origem.CREATE USER MAPPING FOR <user_name> SERVER <fdw_servername> OPTIONS (user <user_name>, password <'user_password'>);
-
Importar Origem do Esquema.
O comando
IMPORT FOREIGN SCHEMA
importa todas as tabelas do esquema público do servidor de origem para o banco de dados de destino como tabelas externas. Essas tabelas aparecem locais, mas extraem dados do banco de dados de origem em tempo real.IMPORT FOREIGN SCHEMA <schema_name> FROM SERVER <fdw_server_name> INTO public;
Por exemplo:
-- Create extension
CREATE EXTENSION postgres_fdw;
-- Create FDW Server
CREATE SERVER fdw_serv FOREIGN DATA WRAPPER postgres_fdw OPTIONS (
host 'primary.xxxxxx.Remote Source DBSystem FQDN.....xxxxx.oci.oraclecloud.com',
dbname 'source',
port '5432'
);
-- User Mapping
CREATE USER MAPPING FOR arvindya SERVER fdw_serv OPTIONS (
user '<user_name>',
password '<user_password>'
);
-- Import Schema from source
IMPORT FOREIGN SCHEMA public FROM SERVER fdw_serv INTO public;
-- Validate Data
SELECT * FROM emp;
Tarefa 5: Configurar a extensão dblink com um exemplo
A função dblink_connect
estabelece uma conexão do banco de dados PostgreSQL de destino com um banco de dados PostgreSQL de origem usando a string de conexão fornecida. Ela inclui parâmetros como nome do banco de dados, host, porta, nome de usuário e senha. A conexão é identificada por um nome exclusivo (myconn
), que é usado para operações dblink
subsequentes. Uma conexão bem-sucedida retorna OK, indicando a prontidão para consultas remotas.
SELECT dblink_connect ('Conn_name', 'dbname=<Remote_source_DBName> port=5432 host=primary.xxxxxx..Remote_source_DbSystem FQDN..xxxx.oci.oraclecloud.com user=<user_name> password=<'user_password'>);
Por exemplo:
CREATE DATABASE target;
\c target
CREATE EXTENSION dblink;
-- Establish Connection
SELECT dblink_connect ('myconn', 'dbname=source port=5432 host=primary.xxxxxx..Remote_source_DbSystem FQDN..xxxx.oci.oraclecloud.com user=<user_name> password=<user_password>');
-- Select from Source
SELECT * FROM dblink('myconn', 'SELECT * FROM testing') AS t(a int);
-- Execute SQL remotely
SELECT * FROM dblink_exec('myconn', 'create table dblinking_table (id int)');
SELECT * FROM dblink_exec('myconn', 'insert into dblinking_table values(generate_series(1,10))');
SELECT * FROM dblink_exec('myconn', 'delete from dblinking_table where id <= 5');
-- Final Validation
SELECT * FROM dblink('myconn', 'SELECT * FROM dblinking_table') AS t(a int);
Links Relacionados
Confirmações
- Autor - Arvind Yadav (Equipe Técnica Principal)
Mais Recursos de Aprendizado
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Enable Inter-Database Access in OCI Database with PostgreSQL using the postgres_fdw and dblink Extensions
G40420-02