AndersonArruda

Artigos de tecnologia ao alcance de um clique!


PostgreSQL - Foreign Table
foreign table data wrapper postgres_fdw server user mapping acesso remoto tabela externa tabela estrangeira esquema dba postgresql pgsql pg postgres

PostgreSQL - Foreign Table

06/05/2022 22:51

1- O que é uma Foreign Table?

São tabelas estrangeiras importadas de outros banco de dados.


2- O que será necessário?

  1. Instalar a extensão postgres_fdw
  2. Criar um SERVER
  3. Criar um USER MAPPING
  4. Criar a FOREIGN TABLE ou importar um FOREIGN SCHEMA "esquema estrangeiro".


Vamos instalar a extensão postgres_fdw

postgres_fdw é um módulo que permite ao FOREIGN DATA WRAPPER, que pode ser usado para acessar dados armazenados em um servidor PostgreSQL externo.

Existem outras extensões como mysql_fdw e oracle_fdw em outro artigo falarei mais sobre isso!


O comando para instalar o postgres_fdw é o seguinte:

CREATE EXTENSION postgres_fdw;


Criando um server

Cria uma definição de servidor estrangeiro! "foreign server" onde define-se alguns dados de conexão como, host, dbname, port, ...

O comando para criar um servidor é o seguinte:

CREATE SERVER nome_servidor FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '127.0.0.1', dbname 'database', port '5432');

Onde:

  • 127.0.0.1 = o host ou o endereço ip onde encontra-se o servidor externo.
  • database = o nome do banco de dados que será conectado
  • port = a porta de acesso do servidor externo onde encontra-se o banco de dados. "O padrão do Postgres é 5432"


Criando um USER MAPPING

USER MAPPING ou mapeamento de usuário serve para armazenar de forma segura dados de acesso ao servidor estrangeiro, como nome de usuário e senha. A partir da versão 13 do postgres é possível utilizar SSL para não super usuários nesse mapeamento.

No futuro escrevo um artigo de como conectar-se através de SSL.


O comando para criar o mapeamento de usuário é o seguinte:

CREATE USER MAPPING FOR user SERVER nome_servidor OPTIONS(user 'foreign_user', password 'pass');

Onde:

  • user = nome do usuário que tem permissão de usar esse mapeamento de usuário
  • foreign_user = nome do usuário do PostgreSQL externo
  • pass = senha de acesso do usuário do PostgreSQL externo.


Criando Foreign Table

Define uma tabela onde os dados estão em outro servidor. A estrutura da tabela não é atualizada automaticamente.

É necessário que seja alterada na foreign table seguindo a estrutura da tabela original.

Se der update/insert/delete numa foreign table os dados serão atualizados, inseridos ou deletados na origem, ou seja no servidor externo. Devendo sempre tomar muito cuidado com isso. Em casos onde não preciso manipular os dados eu deixo permissão somente para select usando GRANT e REVOKE.


Exemplo:

CREATE FOREIGN TABLE tabela1(
  id BIGINT NOT NULL,
  titulo VARCHAR(50) NOT NULL
) SERVER nome_servidor
OPTIONS(schema_name 'public', table_name 'tabela_alvo');

Onde:

  • tabela1 = nome da tabela no servidor atual
  • nome_servidor = nome do servidor que será acessado externamente
  • schema_name 'public' = nome do schema a que se referenciará os dados
  • table_name 'tabela_alvo' = a tabela onde será pego os dados externos. "inclusive pode ser uma view..."

O nome das colunas devem ser iguais ao das colunas alvo.

Exemplo usando uma view:

CREATE FOREIGN TABLE tabela1(
  id BIGINT NOT NULL,
  titulo VARCHAR(50) NOT NULL
) SERVER nome_servidor
OPTIONS(schema_name 'public', table_name 'view_alvo');


Importando schema estrangeiro "IMPORT FOREIGN SCHEMA"

Importa o schema completo de um banco de dados estrangeiro.

Exemplo importando esquema inteiro:

IMPORT FOREIGN SCHEMA esquema_estrangeiro FROM SERVER nome_servidor INTO esquema_local;

Onde:

  • esquema_estrangeiro = nome do esquema do banco de dados externo
  • nome_servidor            = nome do servidor que criamos no exemplo aqui.
  • esquema_local            = nome do esquema do banco de dados local que receberá os dados importados.

Exemplo importando esquema especificando as tabelas:

IMPORT FOREIGN SCHEMA esquema_estrangeiro LIMIT TO (tabela1, tabela2) FROM SERVER nome_servidor INTO esquema_local;

Onde:

  • esquema_estrangeiro = nome do esquema do banco de dados externo
  • nome_servidor            = nome do servidor que criamos no exemplo aqui.
  • esquema_local            = nome do esquema do banco de dados local que receberá os dados importados.
  • (tabela1, tabela2)        = nome das tabelas, views, etc... que serão importadas, utilizando vírgula para separar, pode-se importar quantas quiser desde que esteja dentro do esquema estrangeiro especi­ficado!

Espero poder trazer mais dicas!

Deixem nos comentários sugestões do que posso falar, as vezes demoro pra trazer conteúdo justamente por não saber exatamente o que trazer para vocês.

Até a próxima dica!

Espaço para publicidade
12 Comentário(s)
xlifyqflf
30/06/2023 05:09

PostgreSQL - Foreign Table <a href="http://www.g179cuxpr4sdvm0b7455qg6q03o379k2s.org/">axlifyqflf</a> [url=http://www.g179cuxpr4sdvm0b7455qg6q03o379k2s.org/]uxlifyqflf[/url] xlifyqflf http://www.g179cuxpr4sdvm0b7455qg6q03o379k2s.org/

xtiivlekzq
08/07/2023 23:56

PostgreSQL - Foreign Table [url=http://www.g27j5bd56952k0m6t9jn46e7vxq03vxds.org/]uxtiivlekzq[/url] <a href="http://www.g27j5bd56952k0m6t9jn46e7vxq03vxds.org/">axtiivlekzq</a> xtiivlekzq http://www.g27j5bd56952k0m6t9jn46e7vxq03vxds.org/

jmlstrcx
24/07/2023 03:04

PostgreSQL - Foreign Table jmlstrcx http://www.gl57o9m2p2vom93dgo66tyn7967v825ss.org/ [url=http://www.gl57o9m2p2vom93dgo66tyn7967v825ss.org/]ujmlstrcx[/url] <a href="http://www.gl57o9m2p2vom93dgo66tyn7967v825ss.org/">ajmlstrcx</a>

wfpqbskgix
27/07/2023 18:24

PostgreSQL - Foreign Table [url=http://www.grk1tph70g0h33755a3udoj2m8246a0cs.org/]uwfpqbskgix[/url] <a href="http://www.grk1tph70g0h33755a3udoj2m8246a0cs.org/">awfpqbskgix</a> wfpqbskgix http://www.grk1tph70g0h33755a3udoj2m8246a0cs.org/

jowhlsnmo
30/07/2023 02:45

PostgreSQL - Foreign Table <a href="http://www.gwvd3j5s773223c15f014efot19hdn1bs.org/">ajowhlsnmo</a> jowhlsnmo http://www.gwvd3j5s773223c15f014efot19hdn1bs.org/ [url=http://www.gwvd3j5s773223c15f014efot19hdn1bs.org/]ujowhlsnmo[/url]

drehfne
02/08/2023 19:00

PostgreSQL - Foreign Table <a href="http://www.g7td9vr589jv4a9630w9pgf619h32yhqs.org/">adrehfne</a> [url=http://www.g7td9vr589jv4a9630w9pgf619h32yhqs.org/]udrehfne[/url] drehfne http://www.g7td9vr589jv4a9630w9pgf619h32yhqs.org/

iycsfxvoze
10/08/2023 09:04

PostgreSQL - Foreign Table [url=http://www.grbvz0kd665d2587zg5qhs1rr90i2440s.org/]uiycsfxvoze[/url] <a href="http://www.grbvz0kd665d2587zg5qhs1rr90i2440s.org/">aiycsfxvoze</a> iycsfxvoze http://www.grbvz0kd665d2587zg5qhs1rr90i2440s.org/

rrcjdbjj
26/09/2023 00:21

PostgreSQL - Foreign Table [url=http://www.gqfe73c7b8w434deoh6511swjec61151s.org/]urrcjdbjj[/url] <a href="http://www.gqfe73c7b8w434deoh6511swjec61151s.org/">arrcjdbjj</a> rrcjdbjj http://www.gqfe73c7b8w434deoh6511swjec61151s.org/

Terrybuima
09/10/2023 05:19

Изготовление номерных знаков на авто <a href=https://avto-dublikat.ru/>Дубликат номера</a>

pvmhrtgfc
23/01/2024 02:23

PostgreSQL - Foreign Table [url=http://www.gk4v821qg0a1p021333qr7j5jwf07mxjs.org/]upvmhrtgfc[/url] <a href="http://www.gk4v821qg0a1p021333qr7j5jwf07mxjs.org/">apvmhrtgfc</a> pvmhrtgfc http://www.gk4v821qg0a1p021333qr7j5jwf07mxjs.org/

qnitiyplt
22/03/2024 12:40

PostgreSQL - Foreign Table [url=http://www.g460lv1fa74ml2hb0ivb5772zus19u65s.org/]uqnitiyplt[/url] qnitiyplt http://www.g460lv1fa74ml2hb0ivb5772zus19u65s.org/ <a href="http://www.g460lv1fa74ml2hb0ivb5772zus19u65s.org/">aqnitiyplt</a>

rovdnnwkqn
14/08/2024 05:06

PostgreSQL - Foreign Table rovdnnwkqn http://www.g341u176ma6h255z9a03rrcekye0q39as.org/ [url=http://www.g341u176ma6h255z9a03rrcekye0q39as.org/]urovdnnwkqn[/url] <a href="http://www.g341u176ma6h255z9a03rrcekye0q39as.org/">arovdnnwkqn</a>

Todos os direitos reservados. © 2021-2031
SBBlog Powered By Powered By Sysborg | Powered By Anderson Arruda