C'è un vecchio trucco per usare una named pipe (funziona su Unix, non conosco Windows)
- crea una pipe denominata:
mkfifo /tmp/omyfifo
- scrivi il contenuto del file:
zcat mycsv.csv.z > /tmp/omyfifo &
- [from psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [al termine] :
rm /tmp/omyfifo
Il zcat
in background si bloccherà fino a quando un lettore (qui:il COPY
comando) inizierà la lettura e terminerà a EOF. (o se il lettore chiude il tubo)
Potresti anche avviare più coppie pipe+zcat, che verranno raccolte da più COPY
istruzioni nel tuo script sql.
Funzionerà da pgadmin, ma il processo fifo (+zcat) dovrebbe essere presente sulla macchina su cui è in esecuzione il server DBMS.
A proposito:un trucco simile usando netcat può essere usato per leggere un file da una macchina remota (che ovviamente dovrebbe scrivere il file sul socket di rete)