Det finns ett gammalt knep för att använda en namngiven pipe (fungerar på Unix, vet inte om Windows)
- skapa en namngiven pipe:
mkfifo /tmp/omyfifo
- skriv filens innehåll till den:
zcat mycsv.csv.z > /tmp/omyfifo &
- [från psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [när du är klar] :
rm /tmp/omyfifo
zcat
i bakgrunden kommer att blockeras tills en läsare (här:COPY
). kommando) börjar läsa och avslutas vid EOF. (eller om läsaren stänger röret)
Du kan till och med starta flera pipes+zcat-par, som plockas upp av flera COPY
uttalanden i ditt sql-skript.
Detta kommer att fungera från pgadmin, men fifo (+zcat-processen) bör finnas på maskinen där DBMS-servern körs.
BTW:ett liknande knep med netcat kan användas för att läsa en fil från en fjärrdator (som naturligtvis ska skriva filen till nätverksuttaget)