PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Importieren einer gezippten CSV-Datei in PostgreSQL

Es gibt einen alten Trick, eine benannte Pipe zu verwenden (funktioniert unter Unix, keine Ahnung von Windows)

  • erstellen Sie eine benannte Pipe:mkfifo /tmp/omyfifo
  • Schreiben Sie den Inhalt der Datei hinein:zcat mycsv.csv.z > /tmp/omyfifo &
  • [aus psql] copy mytable(col1,...) from '/tmp/omyfifo'
  • [wenn fertig] :rm /tmp/omyfifo

Die zcat im Hintergrund solange blockiert, bis ein Leser (hier:der COPY Befehl) beginnt mit dem Lesen und endet bei EOF. (oder wenn der Leser die Pipe schließt)

Sie könnten sogar mehrere Pipes+zcat-Paare starten, die von mehreren COPY aufgenommen werden Anweisungen in Ihrem SQL-Skript.

Dies funktioniert von pgadmin aus, aber der fifo (+zcat-Prozess) sollte auf der Maschine vorhanden sein, auf der der DBMS-Server läuft.

Übrigens:Ein ähnlicher Trick mit netcat kann verwendet werden, um eine Datei von einem entfernten Rechner zu lesen (der die Datei natürlich in den Netzwerk-Socket schreiben sollte)