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

Kopier data mellem to tabeller i PostgreSQL ved hjælp af dblink.sql

Når du har installeret pakken i dit system som beskrevet detaljeret i det relaterede spørgsmål installer udvidelsen dblink ind i din database (den du kører denne kode i, den udenlandske db har ikke brug for den):

CREATE EXTENSION dblink;

Du kan finde kodeeksempler i manualen .
Her er en simpel version af, hvad jeg bruger til at kopiere data mellem dbs:First, opret en UDENLANDSKE SERVER

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

FOREIGN DATA WRAPPER postgresql var forudinstalleret i mit tilfælde.
Så opret en funktion, der åbner en forbindelse, fjerner gamle data (valgfrit), henter nye data, kører ANALYZE og lukker forbindelsen:

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. Kan jeg bruge COUNT() og DISTINCT sammen?

  2. PostgreSQL dato() med tidszone

  3. Sailsjs Mysql ORM flere forespørgsler på det samme tabelfelt

  4. Bruger du mysql concat() i WHERE-sætning?