PostgreSQL: Copiare una tabella da un database ad un altro

08:00:00

A volte può essere utile avere un modo veloce per poter far comunicare due database diversi in  una sessione di utilizzo di un database PostgreSQL. Senza dover passare per un programma specifico questo RDBMS ci viene in aiuto con un modulo esterno: dblink. La limitazione è data dal fatto che i due database devono essere su server PostgreSQL.

Installare dblink


Scenario
Vediamo come impostare una connessione tra database diversi e come utilizzare questo strumento per una semplice copia tra tabelle. Notare che i passi che seguono sono espressamente dedicati ad un ambiente GNU\Linux. Lo scenario è quello di avere un unico server in locale chiamato pgserver e due database diversi chiamati source e dest. Nel database source abbiamo una tabella ts con campi name e description e nel database dest abbiamo una tabella td con campi nome e descrizione.


Prerequisiti
Avere un database PostgreSQL installato.

Procedura
Installare se non presente il pacchetto contenente i moduli aggiuntivi per il server

sudo apt-get install postgresql-contrib

Ora dobbiamo installare il modulo dblink sul database dal quale vogliamo eseguire la connessione, nel nostro caso il database destinazione della copia. Cerchiamo con il seguente comando la posizione corretta dello script di installazione da eseguire

sudo find / -name dblink.sql

Il risultato sarà verosimilmente del tipo
/usr/share/postgresql/8.4/contrib/dblink.sql
Eseguiamo lo script con il comando seguente e abbiamo terminato

psql -d dest -U postgres -f /usr/share/postgresql/8.4/contrib/dblink.sql

Esempio pratico

Come esempio più semplice possiamo usare il dblink per copiare i dati della tabella sorgente ts del database source in quella destinazione td del database dest eseguendo la query ovviamente da dest.
INSERT INTO td(nome, descrizione)
SELECT * FROM dblink('dbname=source',
         'SELECT name, description FROM ts')
         AS tmp1 (name text, description text);

Link utili

http://stackoverflow.com/questions/3862648/how-to-use-install-dblink-in-postgresql
http://www.postgresonline.com/journal/archives/44-Using-DbLink-to-access-other-PostgreSQL-Databases-and-Servers.html

You Might Also Like

0 commenti