sql >> Databasteknik >  >> RDS >> PostgreSQL

Kopiera data mellan två tabeller i PostgreSQL med dblink.sql

Efter att du har installerat paketet i ditt system enligt detaljerat i den relaterade frågan installera tillägget dblink in i din databas (den du kör den här koden i, den främmande db behöver den inte):

CREATE EXTENSION dblink;

Du kan hitta kodexempel i manualen .
Här är en enkel version av vad jag använder för att kopiera data mellan dbs:First, skapa en UTLÄNDSK SERVER

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

FOREIGN DATA WRAPPER postgresql var förinstallerat i mitt fall.
Skapa sedan en funktion som öppnar en anslutning, tar bort gammal data (valfritt), hämtar ny data, kör ANALYZE och stänger anslutningen:

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;



  1. EF med oracle - Den angivna butiksleverantören kan inte hittas i konfigurationen eller är inte giltig.

  2. MySQL Max-funktion blandar rader

  3. SQL Senaste bilder från kontakter (grupperade efter kontakt)

  4. SQLPlus - spoolning till flera filer från PL/SQL-block