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?
Das ist ziemlich verrückt. Können Sie die Ausgabe anzeigen? –
Wie viele Datensätze in '/ tmp/my_table.sql'? – xdazz