giovedì 21 febbraio 2008

Dump di una query

Capita spesso di voler estrarre i dati da un database, tramite una query semplice o complessa, e di voler importare tali dati in un altro database. L'operazione può essere eseguita in modo piuttosto semplice dal client testuale psql.

La prima cosa da determinare è il tipo di query che fornisca come output i dati nell'ordine e con il layout (distribuzione delle colonne) desiderato. Una volta fatto questo, è sufficiente collegarsi al database sorgente, eseguire la query scrivendo i risultati su file, e far rileggere tale file dal database destinazione.

Sul database sorgente, tramite psql, occorrerà dare i seguenti comandi:

\a
\f ';'
\t
\o query.sql

ed eseguire quindi la query. I comandi impartiti a psql servono ad eliminare l'output formattato (\a), a impostare il separatore di colonna con un ';' (\f), a mostrare solo i dati senza intestazioni e numero totale di righe visualizzate (\t) e a scrivere automaticamente l'output della query sul file query.sql.

A questo punto è possibile collegarsi al database destinazione e ordinare la lettura e l'inserimento dei dati contenuti nel file query.sql. Per fare questo si può usare il comando \copy, ad esempio, supponendo di voler caricare i dati nella tabella myTable si può impartire il comando:

\copy myTable(col1,col2) from 'query.sql' with delimiter ';'

Si noti che viene specificato il file di origine (query.sql) e il delimitatore di colonna (;). Si noti inoltre come vengano specificate le colonne nelle quali i dati devono essere inseriti (col1, col2) in myTable. E' importante specificare le colonne ogni qual volta il dump dei dati non rispecchi esattamente il layout della tabella stessa, oppure se esistono colonne di tipo serial sulle quali non si vuole agire.

Nessun commento: