Hay un viejo truco para usar una canalización con nombre (funciona en Unix, no sé sobre Windows)
- cree una canalización con nombre:
mkfifo /tmp/omyfifo
- escribe el contenido del archivo:
zcat mycsv.csv.z > /tmp/omyfifo &
- [de psql]
copy mytable(col1,...) from '/tmp/omyfifo'
- [cuando termine]:
rm /tmp/omyfifo
El zcat
en el fondo se bloqueará hasta que un lector (aquí:el COPY
comando) comenzará a leer y terminará en EOF. (o si el lector cierra la tubería)
Incluso podría iniciar varios pares de tubos+zcat, que serán recogidos por múltiples COPY
declaraciones en su script sql.
Esto funcionará desde pgadmin, pero el fifo (+proceso zcat) debe estar presente en la máquina donde se ejecuta el servidor DBMS.
Por cierto:se puede usar un truco similar usando netcat para leer un archivo desde una máquina remota (que por supuesto debería escribir el archivo en el socket de la red)