Translate

sexta-feira, 5 de janeiro de 2018

Postgresql - Exportar dados de uma tabela para um arquivo csv ou txt com o comando psql \copy

Através do comando psql \copy é possível exportar dados de uma tabela para um arquivo. O arquivo pode ser criado 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 - exportar arquivo csv e txt
1º) Exemplo

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

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

Dados da tabela estoque que serão exportados.








Localização e script da tabela "estoque"



Diretório C:\temp

Para a exportaçã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 servidor;
-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 exportar os dados para o arquivo estoque.csv:

\COPY SELECT codigo,  produtocategoria, marca, preco, quantidade FROM estoque)  to 'C:/temp/estoque.csv'  WITH DELIMITER AS ';' CSV HEADER


Comando \copy
Legenda:
  • \COPY: comando psql;
  • (SELECT codigo,  produtocategoria, marca, preco, quantidade FROM estoque): dentro do parenteses colocamos uma query (consulta da tabela estoque). Neste exemplo, foram exportadas todas as colunas da tabela estoque mas isto não é obrigatório, podemos colocar na query algumas colunas ou retornar apenas alguns registros utilizando WHERE na query;
  • to 'C:/temp/estoque.csv': após o "to" 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 do arquivo. Após o "WITH DELIMITER AS", coloque o delimitador. Neste exemplo, escolhemos o ";" mas o delimitador pode ser "|" ou "," entre outros;
  • CSV HEADER: este parâmetro indica que o nome das colunas serão exportados como cabeçalho na primeira linha do arquivo;
Após executar o comando foi gerado um arquivo com cabeçalho e 3 registros.


Arquivo: estoque.csv

2º) Exemplo

Neste exemplo, vamos exportar os dados da tabela "estoque" para o arquivo "estoque_sc.csv". Porém NÃO vamos exportar o cabeçalho.
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

Dados da tabela estoque que serão expotados
Segue o comando \copy para exportar os dados para o arquivo estoque_sc.csv

\COPY SELECT codigo,  produtocategoria, marca, preco, quantidade FROM estoque)  to 'C:/temp/estoque_sc.csv'  WITH DELIMITER AS ';' 

Comando \copy
Legenda:
  • \COPY: comando psql;
  • (SELECT codigo,  produtocategoria, marca, preco, quantidade FROM estoque): dentro do parenteses colocamos uma query (consulta da tabela estoque). Neste exemplo, foram exportadas todas as colunas da tabela estoque mas isto não é obrigatório, podemos colocar na query algumas colunas ou retornar apenas alguns registros utilizando WHERE na query;
  • to 'C:/temp/estoque_sc.csv': após o "to" 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 do arquivo. Após o "WITH DELIMITER AS", coloque o delimitador. Neste exemplo, escolhemos o ";" mas o delimitador pode ser "|" ou "," entre outros;
Após executar o comando foi gerado um arquivo com 3 registros..

Arquivo: estoque_sc.csv