PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Importando arquivo CSV compactado para o PostgreSQL


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)