Para quem usa o recurso de FDW (Foreign Data Wrapper) muitas vezes precisamos ter acesso a diversas tabelas numa base externa.
O recurso de importar schemas resolve tal questão com facilidade.
Os comandos a seguir são feitos no psql:
Criação da base que acessará outra:
CREATE DATABASE db_acessa;
Criação da base a ser acessada:
CREATE DATABASE db_acessado;
Acessando a base a ser acessada:
\c db_acessado
Criação de um schema:
CREATE SCHEMA sc_acessado;
Criação de tabelas no schema criado:
CREATE TABLE sc_acessado.tb_acessado1( id serial primary key, campo int); CREATE TABLE sc_acessado.tb_acessado2( id serial primary key, campo int); CREATE TABLE sc_acessado.tb_acessado3( id serial primary key, campo int);
Acessando a base que acessará outra:
\c db_acessa
Criação de schema:
CREATE SCHEMA sc_acessa;
Habilitar o FDW do Postgres na base corrente:
CREATE EXTENSION postgres_fdw;
Criação do objeto server:
CREATE SERVER srv_acessado FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', dbname 'db_acessado', port '5432');
Criação de mapeamento de usuário:
CREATE USER MAPPING FOR postgres SERVER srv_acessado OPTIONS (user 'postgres', password '123');
Importar o schema sc_acessado da outra base:
IMPORT FOREIGN SCHEMA sc_acessado FROM SERVER srv_acessado INTO sc_acessa;
Verifidando no psql as tabelas estrangeiras que foram importadas do schema escolhido:
\dE sc_acessa.*
List of relations Schema | Name | Type | Owner -----------+--------------+---------------+---------- sc_acessa | tb_acessado1 | foreign table | postgres sc_acessa | tb_acessado2 | foreign table | postgres sc_acessa | tb_acessado3 | foreign table | postgres
Apagando as tabelas estrangeiras:
DROP FOREIGN TABLE sc_acessa.tb_acessado1, sc_acessa.tb_acessado2, sc_acessa.tb_acessado3;
Agora em vez de importarmos todas as tabelas, vamos importar tabelas específicas:
IMPORT FOREIGN SCHEMA sc_acessado LIMIT TO (tb_acessado1, tb_acessado2) FROM SERVER srv_acessado INTO sc_acessa;
Verifidando no psql as tabelas estrangeiras que foram importadas do schema escolhido:
\dE sc_acessa.*
List of relations Schema | Name | Type | Owner -----------+--------------+---------------+---------- sc_acessa | tb_acessado1 | foreign table | postgres sc_acessa | tb_acessado2 | foreign table | postgres