Istnieje stara sztuczka z użyciem nazwanego potoku (działa na Uniksie, nie wiem o Windowsie)
- utwórz nazwany potok:
mkfifo /tmp/omyfifo
- zapisz do niego zawartość pliku:
zcat mycsv.csv.z > /tmp/omyfifo &
- [z psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [po zakończeniu] :
rm /tmp/omyfifo
zcat
w tle zablokuje się aż do czytnika (tutaj:COPY
polecenie) rozpocznie czytanie i zakończy się na EOF. (lub jeśli czytnik zamknie rurkę)
Możesz nawet uruchomić wiele par rur + zcat, które zostaną odebrane przez wiele COPY
instrukcji w skrypcie sql.
Będzie to działać z pgadmin, ale kolejka fifo (proces + zcat) powinna być obecna na maszynie, na której działa serwer DBMS.
BTW:podobna sztuczka przy użyciu netcata może być użyta do odczytania pliku ze zdalnej maszyny (która oczywiście powinna zapisać plik do gniazda sieciowego)