sql >> Database >  >> RDS >> PostgreSQL

Kopieer gegevens tussen twee tabellen in PostgreSQL met dblink.sql

Nadat u het pakket in uw systeem hebt geïnstalleerd zoals beschreven in de gerelateerde vraag installeer de extensie dblink in uw database (degene waarin u deze code uitvoert, de buitenlandse db heeft het niet nodig):

CREATE EXTENSION dblink;

U vindt codevoorbeelden in de handleiding .
Hier is een eenvoudige versie van wat ik gebruik om gegevens te kopiëren tussen dbs:First, maak een BUITENLANDSE SERVER

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

FOREIGN DATA WRAPPER postgresql was in mijn geval vooraf geïnstalleerd.
Maak vervolgens een functie die een verbinding opent, oude gegevens verwijdert (optioneel), nieuwe gegevens ophaalt, ANALYZE uitvoert en verbreekt de verbinding:

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. voeg een tijdelijke kolom toe met een waarde

  2. Hoe kan ik PostgreSQL vertellen dat de hele transactie niet moet worden afgebroken als een enkele beperking is mislukt?

  3. MySql die standaardwaarde selecteert als er geen resultaten zijn?

  4. Toon string van raise_application_error in Java-programma