PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Copia i dati tra due tabelle in PostgreSQL usando dblink.sql

Dopo aver installato il pacchetto nel tuo sistema come dettagliato nella relativa domanda installa l'estensione dblink nel tuo database (quello in cui stai eseguendo questo codice, il db esterno non ne ha bisogno):

CREATE EXTENSION dblink;

Puoi trovare esempi di codice nel manuale .
Ecco una versione semplice di ciò che uso per copiare i dati tra dbs:Primo, crea un SERVER ESTERO

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

FOREIGN DATA WRAPPER postgresql era preinstallato nel mio caso.
Quindi crea una funzione che apre una connessione, rimuove i vecchi dati (facoltativo), recupera i nuovi dati, esegue ANALYZE e chiude la connessione:

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;