sql >> Base de Datos >  >> RDS >> PostgreSQL

Importación de un archivo CSV comprimido en PostgreSQL

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)