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);
Observações
Para que o arquivo seja criado verifique as permissões do diretório. Veja a imagem abaixo:
muito bom e muito simples
ResponderExcluirObrigado!!!!
ResponderExcluirtem como saber se o arquivo destino já existe?
ResponderExcluirparabéns pela rotina mas no meu computador ele pede que o arquivo de destino já esteja criado
ResponderExcluirO meu deu o seguinte erro "ERRO: não pôde abrir arquivo "C:/arq_esporte.csv" para escrita: Permission denied
ResponderExcluirSQL state: 42501"
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
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirBom 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?
ResponderExcluirBoa noite, desculpa a demora em responder.
ExcluirPara 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.
Talvez este outro artigo te ajude também:
Excluirhttps://jquerydicas.blogspot.com/2018/01/postgresql-exportar-dados-de-uma-tabela.html
Valeu, funcionou estava me atrapalhando com o separador de diretório.
ResponderExcluirExemplo muito obrigado
ResponderExcluir