2 Stimmen

psql dumpt eine Tabelle und den Speicherverbrauch

Hallo ich möchte eine Postgres-Tabelle in eine csv-Datei ausgeben. Die Datenbank ist lokal auf dem (Linux) Rechner, auf dem ich arbeite.

psql dev -U myusername -c "select * from control.mytable;" > mydata.csv

mytable ist ziemlich groß - etwa 120 Millionen Zeilen. Ich mache mir Sorgen, dass dies viel zu viel Arbeitsspeicher beansprucht, und wenn ich mit top überwache, scheint die Speichernutzung immer weiter anzusteigen, und so beende ich sie, wenn sie einen bestimmten Punkt erreicht. Weiß jemand, ob dies ein wirklich die eine enorme Menge an Speicherplatz beanspruchen? Ich weiß, dass die von top gemeldete Nutzung für Uneingeweihte wie mich etwas irreführend sein kann. Gibt es Alternativen, die nicht so viel Speicherplatz benötigen?

1voto

Frank Heikens Punkte 105033

Warum benutzen Sie nicht KOPIEREN um die csv-Datei zu erstellen? COPY leistet eine viel bessere Arbeit.

1voto

Peter Eisentraut Punkte 33105

Wenn Sie so vorgehen, wird die gesamte Ergebnismenge im Client aufgebaut. Ja, es wird also wirklich viel Speicherplatz benötigt. Wenn Sie dies vermeiden wollen, verwenden Sie einen Cursor, um das Ergebnis in Stapeln abzurufen. Oder verwenden Sie COPY das bereits über einen CSV-Modus verfügt.

1voto

Dustin Butler Punkte 771

Wenn Sie COPY verwenden, müssen Sie zu stdout gehen, es sei denn, Sie führen es als Postgres-Benutzer aus, dann können Sie direkt zu einer Datei gehen.

psql -U myusername dev -c "COPY  (select * from control.mytable) TO STDOUT WITH CSV HEADER;" > mydata.csv

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X