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

Importação de CSV do PostgreSQL a partir da linha de comando


A solução na resposta aceita funcionará apenas no servidor e quando o usuário que estiver executando a consulta terá permissões para ler o arquivo conforme explicado nesta resposta SO.

Caso contrário, uma abordagem mais flexível é substituir o COPY do SQL comando com o psql "meta-comando" chamado \copy que tem as mesmas opções que o COPY "real", mas é executado dentro do cliente (sem necessidade de ; no final):
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

De acordo com os documentos, o \copy comando:

Executa uma cópia de frontend (cliente). Esta é uma operação que executa um comando SQL COPY, mas em vez de o servidor ler ou gravar o arquivo especificado, o psql lê ou grava o arquivo e roteia os dados entre o servidor e o sistema de arquivos local. Isso significa que a acessibilidade e os privilégios do arquivo são aqueles do usuário local, não do servidor, e nenhum privilégio de superusuário SQL é necessário.

Além disso, se o the_file.csv contém o cabeçalho na primeira linha, ele pode ser reconhecido adicionando header no final do comando acima:
psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"