PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Importazione di file CSV compressi in PostgreSQL

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)