PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kopieren Sie Daten zwischen zwei Tabellen in PostgreSQL mit dblink.sql

Nachdem Sie das Paket in Ihrem System wie beschrieben installiert haben in der zugehörigen Frage Installieren Sie die Erweiterung dblink in Ihre Datenbank (diejenige, in der Sie diesen Code ausführen, die fremde Datenbank benötigt ihn nicht):

CREATE EXTENSION dblink;

Sie finden Codebeispiele im Handbuch .
Hier ist eine einfache Version dessen, was ich zum Kopieren von Daten zwischen Datenbanken verwende:Zuerst fremden Server erstellen

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

FOREIGN DATA WRAPPER postgresql war in meinem Fall vorinstalliert.
Erstellen Sie dann eine Funktion, die eine Verbindung öffnet, alte Daten entfernt (optional), neue Daten holt, ANALYZE ausführt und schließt die Verbindung:

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;