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)