Translate

quinta-feira, 24 de outubro de 2013

PostgreSql - exportar arquivo csv ou txt

Vamos supor que precisamos exportar os dados da tabela "tb_esporte" para um arquivo csv. 
Podemos visualizar a tabela esporte a seguir:



Para exportar os dados da tabela utilizamos o comando sql COPY e o arquivo deve estar armazenado no servidor do banco de dados. 

Caso você precise acessar remotamente um arquivo, ou seja, o arquivo está em uma outra máquina você deve utilizar o comando psql \copy. Acesse o link em:



Para exportar a tabela utilizamos o seguinte comando:

COPY

(
    SELECT id, esporte_desc, disponibilidade FROM tb_esporte
)
TO 'C:/temp/arq_esporte.csv'
DELIMITER ';'
CSV HEADER

Significado:
  • COPY: comando utilizado para exportar a tabela;
  • (...):  dentro do parenteses montamos o "SELECT" com as colunas que desejamos exportar;
  • TO: após o  "TO" devemos colocar o diretório que desejamos salvar o arquivo. O diretório sempre deve usar "/", nunca "\", tanto para Windows quanto para Linux. O arquivo foi salvo como csv, foi utilizada a extensão ".csv", caso queira salvar como txt troque a extensão do arquivo para ".txt";
  • DELIMITER: após o delimiter devemos colocar o separador que queremos utilizar. O separador poder ser ";", ",", "|" entre outros. Neste caso foi utilizado o ";" ;
  • CSV HEADER: utilize "CSV HEADER" caso queira que os nomes das colunas apareçam no arquivo (cabeçalho);
Após executar o comando você poderá visualizar o arquivo no diretório escolhido. Caso não esteja visível pressione a tecla "F5". O arquivo criado poder ser visualizado na imagem abaixo. 



A versão do PostgreSql utilizada neste exemplo é a 9.0.


Observações

Para que o arquivo seja criado verifique as permissões do diretório. Veja a imagem abaixo:


12 comentários:

  1. muito bom e muito simples

    ResponderExcluir
  2. tem como saber se o arquivo destino já existe?

    ResponderExcluir
  3. parabéns pela rotina mas no meu computador ele pede que o arquivo de destino já esteja criado

    ResponderExcluir
  4. O meu deu o seguinte erro "ERRO: não pôde abrir arquivo "C:/arq_esporte.csv" para escrita: Permission denied
    SQL state: 42501"

    ResponderExcluir
    Respostas
    1. Boa Noite, você deve verificar as permissões do diretório (pasta) que será criado o arquivo. Clique com o botão direito no diretório, escolha a opção "Propriedades" do menu. Será exibida uma janela chamada "Propriedades de Arquivos". Escolha um nome de um grupo ou usuário e conceda a permissão de gravar (marque o checkbox para permitir gravar). Observação: não recomendo você alterar as permissões do diretório "c:", pois normalmente este diretório contem aplicações instaladas, crie um subdiretório. Vou printar no artigo a tela de permissões talvez fique mais claro. Att

      Excluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. Bom dia!! existe a possibilidade de utilizar o comando copy para ser salvo em um diretório na rede e não na própria máquina? Caso sim, onde consigo mais informações sobre?

    ResponderExcluir
    Respostas
    1. Boa noite, desculpa a demora em responder.

      Para gerar um arquivo “csv” na máquina cliente será necessário utilizar o comando “COPY via psql.

      Pressionar a tecla do (Windows + R) será aberta a ferramenta “Executar”, digite cmd

      Será aberto o prompt de comando.

      Caso não queira salvar o arquivo, onde está instalado o cliente, mas em outra máquina da rede, será necessário fazer o mapeamento do diretório (pasta) do servidor. Aqui eu utilizei a letra “Z” mas poderia ser qualquer outra. Esta pasta deverá ter a permissão de escrita.

      Para mapear o um diretório digite no prompt, o comando “NET USE”.

      Exemplo:

      NET USE Z: \\HPRED\teste_comp

      ***IMPORTANTE***

      Se o arquivo gerado já existir no diretório indicado, os dados serão sobrescritos
      ********************************************************

      O comando psql deve estar incluído na “variável de ambiente do Windows”. Caso não saiba se o comando psql já está configurado faça o teste digitando:

      where psql.exe

      Se estiver configurado, será exibido o seu diretório de instalação. No meu caso é:
      C:\postgresql_10_13_2\pgsql\bin\psql.exe

      Senão, será exibido
      INFORMAÇÕES: não foi possível localizar arquivos para o(s) padrão(ões) especificado(s).

      Você pode adicionar esta variável via prompt ou via interface gráfica, caso não tenha o hábito de preferência a interface gráfica, mas se preferir segue o comando:

      set PATH=%PATH%;caminho_do_executavel.

      Exemplo. O meu caminho é:

      set PATH=%PATH%;C:\postgresql_10_13_2\pgsql\bin\

      Caso prefira fazer a configuração da variável de ambiente via interface gráfica para o psql veja o artigo:

      https://jquerydicas.blogspot.com/2013/10/psql-nao-e-reconhecido-como-um-comando.html

      Existe duas formas de exportar utilizando o \copy:

      ---1ª FORMA - é composta de duas partes:

      --1ª PARTE - Conexão com o banco

      psql -h 104.197.20.162 -d db_01 -U postgres
      Será solicitada a senha para usuário. Digite a senha

      --2ª PARTE - Executar o comando \COPY

      \COPY ( SELECT codigo, produto, categoria, marca, preco, quantidade FROM estoque) to 'Z:\exp_dados.csv.csv' WITH DELIMITER AS ';' CSV HEADER


      ---2ª FORMA - a conexão e comando \COPY serão executados através de uma única sentença.

      Executa a sentença

      psql -h 104.197.20.162 -d db_01 -U postgres -c "COPY ( SELECT codigo, produto, categoria, marca, preco, quantidade FROM estoque) TO STDOUT (format csv, delimiter ';')" > Z:\exp_dados.csv

      Será solicitada a senha para usuário. Digite a senha
      Após a exportação dos dados, o psql será fechado automaticamente

      Você também poderá gerar um arquivo separado para log erros. Exemplo:

      psql -h 104.197.20.162 -d db_01 -U postgres -c "COPY ( SELECT codigo, produto, categoria, marca, preco, quantidade FROM estoque) TO STDOUT (format csv, delimiter ';')" > Z:\exp_dados.csv 2> Z:\log_erro.txt

      Após a exportação dos dados, o psql será fechado automaticamente

      Legenda

      -h => ip do servidor

      -d => nome da base de dados

      -U => usuário do banco

      -c => comando que deve ser executado, o comando está entre aspas duplas. Neste caso é um comando select

      STDOUT => indica que a saída do comando, neste caso os dados devem ser direcionados para o cliente.

      delimiter => indica qual caracter será usado como separador de colunas, neste exemplo foi utilizado o ponto e vírgula

      Símbolo “>” => este comando não é do psql, mas do próprio prompt indicando que o resultado deve ser armazenado em um arquivo. Depois do símbolo coloque o diretório onde será salvo e o nome do arquivo.

      Símbolo “>2“ => este comando também não é do psql, mas do próprio prompt indicando que se houver erro de execução o resultado deve ser armazenado em um outro arquivo. Depois do símbolo coloque o diretório onde será salvo e o nome do arquivo que armazenará o erro.

      Excluir
    2. Talvez este outro artigo te ajude também:
      https://jquerydicas.blogspot.com/2018/01/postgresql-exportar-dados-de-uma-tabela.html

      Excluir
  7. Valeu, funcionou estava me atrapalhando com o separador de diretório.

    ResponderExcluir
  8. Exemplo muito obrigado

    ResponderExcluir