2014-04-23 15 views
5

Ich muss den Inhalt einer Tabelle aus einer Datenbank in eine andere Datenbank mit einer identischen Tabelle kopieren, die derzeit leer ist.pg_dump vs COPY (SELECT * FROM my_table)

Ich plane, die Tabellendaten aus der alten Tabelle auszugeben und dann einfach in die leere Tabelle in der neuen Datenbank zu importieren. Ich habe jedoch ein Verhalten kennengelernt, das ich mit pg_dump nicht verstehe.

Ich versuche, die Tabellendaten in eine Datei mit dem Befehl dump:

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

Dies funktioniert, aber ich bekomme nur 8 Aufzeichnungen und es gibt mehr als 1000 Datensätze in der Tabelle, wenn ich den Tisch wie so sehe :

SELECT * FROM my_table; 

Also habe ich versucht, den COPY-Befehl zu verwenden, um eine CSV-Datei zu erzeugen, und ich sehe ein ähnliches Verhalten:

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

Ich bekomme die gleichen 8 Datensätze wie pg_dump. Aber mit:

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

Ich bekomme alle 1266 Datensätze.

Ich würde annehmen, diese Befehle sollten alle die gleichen Daten zurückgeben, aber offensichtlich liege ich falsch. Was ist der Unterschied?

+0

Das ist ziemlich verrückt. Können Sie die Ausgabe anzeigen? –

+0

Wie viele Datensätze in '/ tmp/my_table.sql'? – xdazz

Antwort

3

Ist es möglich, dass my_table Teil einer Vererbungshierarchie ist? Ich frage, weil http://www.postgresql.org/docs/9.0/interactive/sql-copy.html#AEN58984 hat das:

COPY behandelt nur mit der spezifischen Tabelle namens; Es kopiert keine Daten in oder aus untergeordneten Tabellen. So zeigt zum Beispiel COPY table TO die gleichen Daten wie SELECT * FROM ONLY table. Aber COPY (SELECT * FROM table) TO ... kann verwendet werden, um alle Daten in einer Vererbungshierarchie abzulegen.

Sie sollten, indem Sie überprüfen können:

SELECT * FROM ONLY my_table; 

Wenn das nur die 8 Datensätze zurückgibt, dann sind wir auf dem richtigen Weg, und wir müssen nur die untergeordneten Tabellen finden (für die How to find child tables that inherit from another table in PSQL wird hilfreich sein).

Wenn nicht, dann bin ich nicht sicher - ich fragte mich, ob vielleicht Regeln oder Auslöser involviert waren, aber ich kann nicht sehen, wie im Moment. Trotzdem, vielleicht gibt es jemand anderen eine Idee ...?

Verwandte Themen