2014-04-23 17 views
5

Ho bisogno di copiare il contenuto di una tabella da un database ad un altro database con una tabella identica che è attualmente vuota.pg_dump vs COPY (SELECT * FROM my_table)

Ho intenzione di scaricare i dati della tabella dalla vecchia tabella e quindi semplicemente importarlo nella tabella vuota nel nuovo database. Tuttavia, mi sono imbattuto in qualche comportamento che non capisco usando pg_dump.

cerco di scaricare i dati della tabella in un file con il comando:

pg_dump -a -t '"my_table"' my_database > /tmp/my_table.sql 

questo funziona, ma ho solo 8 dischi e ci sono oltre 1000 i record nella tabella se visualizzare la tabella in questo modo :

SELECT * FROM my_table; 

Così, ho cercato di usare il comando COPY per generare un file .csv e vedo un comportamento simile:

COPY my_table TO '/tmp/my_table.csv' WITH CSV HEADER; 

Ottengo gli stessi 8 record di pg_dump. Ma con:

COPY (SELECT * FROM my_table) TO '/tmp/my_table.csv' WITH CSV HEADER; 

Ottengo tutti i record 1266.

Suppongo che questi comandi debbano tutti restituire gli stessi dati, ma ovviamente, ho torto. Qual è la differenza?

+0

È piuttosto pazzesco. Puoi mostrare l'output? –

+0

quanti dischi in '/ tmp/my_table.sql'? – xdazz

risposta

3

È possibile che my_table faccia parte di una gerarchia di ereditarietà? Chiedo perché http://www.postgresql.org/docs/9.0/interactive/sql-copy.html#AEN58984 ha questo:

COPIA tratta solo con la tabella specifica denominata; non copia i dati da o verso tabelle figlio. Pertanto, ad esempio, COPY table TO mostra gli stessi dati di SELECT * FROM ONLY table. Ma è possibile utilizzare COPY (SELECT * FROM table) TO ... per eseguire il dump di tutti i dati in una gerarchia di ereditarietà.

Si dovrebbe essere in grado di controllare eseguendo:

SELECT * FROM ONLY my_table; 

Se questo restituisce solo i 8 record allora siamo sulla strada giusta, e abbiamo solo bisogno di trovare le tabelle figlio (per il quale How to find child tables that inherit from another table in PSQL sarà utile).

In caso contrario, non sono sicuro - mi sono chiesto se forse le regole o i trigger venissero coinvolti, ma non riesco a vedere come al momento. Eppure, forse dà a qualcun altro un'idea ...?

Problemi correlati