Има стар трик за използване на наименувана тръба (работи на Unix, не знам за Windows)
- създайте наименувана тръба:
mkfifo /tmp/omyfifo
- запишете съдържанието на файла в него:
zcat mycsv.csv.z > /tmp/omyfifo &
- [от psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [когато приключи] :
rm /tmp/omyfifo
zcat
в backgound ще блокира, докато четецът (тук:COPY
команда) ще започне да чете и ще завърши на EOF. (или ако четецът затвори тръбата)
Можете дори да стартирате няколко двойки pipes+zcat, които ще бъдат взети от множество COPY
изрази във вашия sql скрипт.
Това ще работи от pgadmin, но fifo (+zcat процес) трябва да присъства на машината, където работи сървърът на СУБД.
BTW:подобен трик с помощта на netcat може да се използва за четене на файл от отдалечена машина (която, разбира се, трябва да запише файла в мрежовия сокет)