Er is een oude truc om een named pipe te gebruiken (werkt op Unix, weet niets van Windows)
- maak een named pipe:
mkfifo /tmp/omyfifo
- schrijf de bestandsinhoud erin:
zcat mycsv.csv.z > /tmp/omyfifo &
- [van psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [wanneer klaar] :
rm /tmp/omyfifo
De zcat
in de achtergrondkleur blokkeert totdat een lezer (hier:de COPY
command) begint met lezen en eindigt bij EOF. (of als de lezer de pijp sluit)
Je zou zelfs meerdere pijpen+zcat-paren kunnen starten, die worden opgepikt door meerdere COPY
instructies in uw sql-script.
Dit werkt vanuit pgadmin, maar de fifo (+zcat-proces) moet aanwezig zijn op de machine waarop de DBMS-server draait.
Tussen haakjes:een soortgelijke truc met netcat kan worden gebruikt om een bestand van een externe machine te lezen (die het bestand natuurlijk naar de netwerksocket zou moeten schrijven)