PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Copier des données entre deux tables dans PostgreSQL à l'aide de dblink.sql

Après avoir installé le package sur votre système comme détaillé dans la question connexe installez l'extension dblink dans votre base de données (celle dans laquelle vous exécutez ce code, la base de données étrangère n'en a pas besoin) :

CREATE EXTENSION dblink;

Vous pouvez trouver des exemples de code dans le manuel .
Voici une version simple de ce que j'utilise pour copier des données entre les bases de données :d'abord, créer un SERVEUR ÉTRANGER

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

FOREIGN DATA WRAPPER postgresql était pré-installé dans mon cas.
Ensuite, créez une fonction qui ouvre une connexion, supprime les anciennes données (facultatif), récupère les nouvelles données, exécute ANALYZE et ferme la connexion :

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;