Translate

sábado, 30 de dezembro de 2017

Postgresql - Importar dados de um arquivo csv ou txt com o comando psql \copy

Através do comando psql \copy é possível importar dados de um arquivo para uma tabela. O arquivo pode estar localizado tanto no servidor quanto em uma máquina cliente.

Neste exemplo, vamos executar os comandos do cliente psql através do prompt de comando do Windows.

Em breve, será postado como executar os comandos no terminal linux.

Não confunda com o comando sql copy, onde o arquivo deve estar obrigatoriamente no servidor.
Para saber mais sobre o comando sql copy acesse o link: Postgresql - Importar arquivo csv e txt
1º) Exemplo

Vamos importar os dados do arquivo "estoque.csv" localizado no diretório "C:\temp" da máquina cliente para a tabela "estoque", contida no banco de dados "db_rem", localizado no servidor "104.197.20.162".

Caso tenha interesse, faça o download deste exemplo no Google Drive ou veja no GitHub.

Note que este arquivo possui cabeçalho na 1ª linha:
O cabeçalho é:
codigo;produto;categoria;marca;preco;quantidade

Arquivo: estoque.csv
Diretório C:\temp


Localização e script da tabela "estoque"

Para a importação siga as etapas abaixo:

a) Abra o prompt de comando.

Prompt de Comando

b) Faça a autenticação no servidor.

Autenticação

Segue o comando:
psql -h 104.197.20.162 -d db_rem -U postgres

Legenda:
-h: ip ou nome do host;
-d: nome do banco de dados;
-U: nome do usuário;

c) Será solicitada a senha, repare que ao digitar a senha não serão exibidos os caracteres. Digite a senha e pressione "Enter".

d) Agora utilize o comando \copy para importar os dados para a tabela estoque:

\copy estoque(codigoprodutocategoria, marca, preco, quantidade)  from 'C:/temp/estoque.csv' with delimiter as ';' CSV HEADER


Comando \copy
Legenda:
  • \copy: comando psql;
  • estoque: nesta tabela serão incluídos os registros que estão no arquivo;
  • codigoprodutocategoria, marca, preco e quantidade: nome das colunas;
  • from 'C:/temp/estoque.csv': após o "from" deverá ser colocado o nome do diretório, seguido pelo nome do arquivo e a extensão. Neste exemplo, a extensão é ".csv" mas poderia ser ".txt". Importante!!! Até mesmo no sistema operacional Windows, repare que NÃO se deve utilizar a barra invertida "\", e sim a barra normal "/" para identificar o diretório;
  • with delimiter as ';': o delimitador serve para separar as colunas. Após o "with  delimiter as", coloque o delimitador. Neste exemplo é o ";" mas o delimitador pode ser "|" ou "," entre outros;
  • CSV HEADER: este parâmetro indica que o arquivo possui cabeçalho;
Após executar o comando, 3 registros foram inseridos na tabela.

Registros importados






2º) Exemplo

Neste exemplo, vamos importar um arquivo sem cabeçalho chamado "estoque_sc.csv". O procedimento é o mesmo do anterior com exceção do comando \copy que NÃO será utilizado o parâmetro CSV HEADER.

Caso tenha interesse, faça o download deste exemplo no Google Drive ou veja no GitHub.


Arquivo: estoque_sc.csv

Segue o comando \copy para importar os dados para a tabela estoque:

\copy estoque(codigoprodutocategoria, marca, preco, quantidade)  from 'C:/temp/estoque_sc.csv' with delimiter as ';' 


Comando \copy

Legenda:
  • \copy: comando psql;
  • estoque: nesta tabela serão incluídos os registros que estão no arquivo;
  • codigoprodutocategoria, marca, preco e quantidade: nome das colunas;
  • from 'C:/temp/estoque_sc.csv': após o "from" deverá ser colocado o nome do diretório, seguido pelo nome do arquivo e a extensão. Neste exemplo, a extensão é ".csv" mas poderia ser ".txt". Importante!!! Até mesmo no sistema operacional Windows, repare que NÃO se deve utilizar a barra invertida "\", e sim a barra normal "/" para identificar o diretório;
  • with delimiter as ';': o delimitador serve para separar as colunas. Após o "with  delimiter as", coloque o delimitador. Neste exemplo é o ";" mas o delimitador pode ser "|"  ou ","  entre outros;
Após executar o comando, 3 registros foram inseridos na tabela.

Registros Importados


2 comentários:

  1. Muito Obrigado!!!!
    Me salvou demais

    ResponderExcluir
  2. Jovem. Tenho o postgres instalado em um container em um NAS e gostaria de importar dados de um arquivo csv para uma tabela no servidor. A questão é que o prompt não reconhece o comando para acessar o BD psql

    ResponderExcluir