Existe um truque antigo para usar um pipe nomeado (funciona no Unix, não sei sobre o Windows)
- crie um pipe nomeado:
mkfifo /tmp/omyfifo
- grave o conteúdo do arquivo nele:
zcat mycsv.csv.z > /tmp/omyfifo &
- [do psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [quando terminar] :
rm /tmp/omyfifo
O
zcat
no fundo irá bloquear até que um leitor (aqui:o COPY
command) começará a ler e terminará em EOF. (ou se o leitor fechar o tubo) Você pode até mesmo iniciar vários pares pipes + zcat, que serão selecionados por vários
COPY
instruções em seu script sql. Isso funcionará a partir do pgadmin, mas o fifo (+zcat process) deve estar presente na máquina onde o servidor DBMS é executado.
BTW:um truque semelhante usando netcat pode ser usado para ler um arquivo de uma máquina remota (que obviamente deve gravar o arquivo no soquete de rede)