sql >> Base de Datos >  >> RDS >> PostgreSQL

Copie datos entre dos tablas en PostgreSQL usando dblink.sql

Después de haber instalado el paquete en su sistema como se detalla en la pregunta relacionada instale la extensión dblink en su base de datos (en la que está ejecutando este código, la base de datos externa no lo necesita):

CREATE EXTENSION dblink;

Puede encontrar ejemplos de código en el manual .
Aquí hay una versión simple de lo que uso para copiar datos entre bases de datos:Primero, crear un SERVIDOR EXTRANJERO

CREATE SERVER mydb
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '111.111.111.111',port '5432',dbname 'mydb');

FOREIGN DATA WRAPPER postgresql estaba preinstalado en mi caso.
Luego crea una función que abre una conexión, elimina datos antiguos (opcional), recupera datos nuevos, ejecuta ANALYZE y cierra la conexión:

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;