Existuje starý trik na použití pojmenované roury (funguje na Unixu, nevím o Windows)
- vytvořte pojmenovaný kanál:
mkfifo /tmp/omyfifo
- zapište do něj obsah souboru:
zcat mycsv.csv.z > /tmp/omyfifo &
- [z psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [po dokončení]:
rm /tmp/omyfifo
zcat
na pozadí se zablokuje, dokud nebude čtečka (zde:COPY
příkaz) začne číst a skončí na EOF. (nebo pokud čtečka zavře potrubí)
Můžete dokonce spustit několik párů potrubí + zcat, které budou zachyceny několika COPY
příkazy ve vašem skriptu SQL.
To bude fungovat z pgadmin, ale fifo (proces +zcat) by měl být přítomen na počítači, kde běží server DBMS.
BTW:podobný trik pomocí netcat lze použít ke čtení souboru ze vzdáleného počítače (což by samozřejmě mělo zapsat soubor do síťového soketu)