PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Copie dados entre duas tabelas no PostgreSQL usando dblink.sql


Depois de instalar o pacote em seu sistema conforme detalhado na pergunta relacionada instale a extensão dblink em seu banco de dados (aquele em que você está executando este código, o banco de dados externo não precisa):
CREATE EXTENSION dblink;

Você pode encontrar exemplos de código no manual .
Aqui está uma versão simples do que eu uso para copiar dados entre dbs:Primeiro, criar um SERVIDOR ESTRANGEIRO
CREATE SERVER mydb
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '111.111.111.111',port '5432',dbname 'mydb');

FOREIGN DATA WRAPPER postgresql foi pré-instalado no meu caso.
Em seguida, crie uma função que abre uma conexão, remove dados antigos (opcional), busca novos dados, executa ANALYZE e fecha a conexão:
CREATE OR REPLACE FUNCTION f_tbl_sync()
  RETURNS text AS
$BODY$
SELECT dblink_connect('mydb');  -- USER MAPPING for postgres, PW in .pgpass

TRUNCATE tbl;  -- optional

INSERT INTO tbl
SELECT * FROM dblink(
  'SELECT tbl_id, x, y
   FROM   tbl
   ORDER  BY tbl_id')
    AS b(
 tbl_id int
,x int
,y int)

ANALYZE tbl;

SELECT dblink_disconnect();
$BODY$
  LANGUAGE sql VOLATILE;