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)