Erro ao migrar quantidade muito extensa de informações de uma tabela do PostgreSQL para TXT

08/04/2014

0

Olá. O caso é o seguinte: com o código abaixo consigo migrar perfeitamente os dados de uma tabela do PostgreSQL para um txt ou excel, porém, em uma tabela específica, que possui mais de 6.000 linhas e alguns atributos abusando da possibilidade de possuírem 200 caracteres, dá um erro estranho. Mais especificamente, o txt passa a ter 9 MB, demora alguns segundos pra ser aberto e quando abre aparecem inúmeros caracteres estranhos.

 COPY (SELECT * FROM tabela ORDER BY atributo) TO 'C:/C/exemplo.txt' WITH delimiter ';' NULL AS 'null' ENCODING 'LATIN1'; 


Qualquer ajuda vou ficar muito grato.

Obs: Copiei uma parte dos caracteres que aparecem a mais no txt:

001\\000\\000\\003\\240\\004\\000\\001\\000\\000\\000\\334\\001\\000\\000\\005\\240\\004\\000\\001\\000\\000\\000\\344\\000\\000\\000 \\244\\002\\000!\\000\\000\\000\\302\\000\\000\\000\\000\\000\\000\\0002014:03:24 15:46:23\\0005bf23dd52585e1fb6f78a25416ae3778\\000\\000\\003\\000\\002\\000\\007\\000\\004\\000\\000\\0000100\\001\\020\\004\\000\\001\\000\\000\\000\\261\\011\\000\\000\\002\\020\\004\\000\\001\\000\\000\\000\\266\\015\\000\\000\\000\\000\\000\\000\\006\\000\\003\\001\\003\\000\\001\\000\\000\\000\\006\\000\\000\\000\\032\\001\\005\\000\\001\\000\\000\\000\\\\\\001\\000\\000\\033\\001\\005\\000\\001\\000\\000\\000d\\001\\000\\000(\\00
Daniel Hannemann

Daniel Hannemann

Responder

Posts

08/04/2014

Jair N.

Boa Tarde, dependendo do "o quê" você está exportando... existe imagem, texto formatado etc. Agora, em Backup você consegue exportar apenas essa tabela?
pelo "pg_dump"

Essa exportação que você está utilizando, como ela é feita?
Responder

09/04/2014

Daniel Hannemann

Bom.. a ideia é exportar apenas uma tabela mesmo. O problema é que a tabela que recebe os dados não possui o mesmo número de colunas e ainda estas estão em outra ordem. Por isso eu migro do PostgreSQL pra um TXT, do TXT pro Excel, nesse coloco as colunas na ordem certa manualmente, depois passo de volta pro TXT e por fim pra tabela no Banco que recebe os dados no PostgreSQL.

Faço a migração do PostgreSQL pro TXT através do código abaixo:
 COPY (SELECT * FROM tabela ORDER BY atributo) TO 'C:/C/exemplo.txt' WITH delimiter ';' NULL AS 'null' ENCODING 'LATIN1'; 


Eu passaria direto do PostgreSQL pro Excel pra pular um passo, mas alguns atributos são do tipo Date e outros possuem 0 à esquerda que somem no excel. Então é necessário primeiro Formatar as Células no Excel pro tipo Texto pra não dar erro (mas isso é outra história. rs).
Responder

09/04/2014

Alex Lekao

Ola dhannemann, bom dia!!

So uma duvida que fiquei, as duas tabelas sao do proprio postgree?

se sim, seria basicamente um insert do dados em outra tabela correto?

Experimente fazer um insert com o select do que vc precisa, assim vc coloca no select a ordem correta dos campos para nao ter problema com relacao a ordem e faz as conversoes dos formatos no select para vc nao ter problemas com os formatos, acredito que resolva o problema.

Espero ter ajudado.

Abraco.

Alex - Lekao

P.S.: Nao tenho conhecimentos com PostGreeSQL. rsrsr
Responder

09/04/2014

Daniel Hannemann

Alex sua ideia é ótima. Mas infelizmente, apesar das duas tabelas estarem no PostgreSQL,elas estão em Bancos de Dados diferentes.
Vou usar sua ideia pra situações futuras em que as duas tabelas estejam no mesmo Banco.
Mas pro caso atual (de Bancos diferentes), pelo que pesquisei é possível tbm, mas não consegui e decidi partir pro TXT e fiquei apenas com esse problema de exportar uma quantidade extensa de dados rsrs
Responder

09/04/2014

Alex Lekao

Ok.

Entao vamos para outra sugestao entao. rsrsr

No lugar de exportar como TXT, experimente exportar como CSV, eh um TXT tambem, so que para uso mais geral, nele vc tem que definir os separadores de colunas etc.

Nao sei como o PostGree se comporta a respeito nem como ele faz, mas eh mais uma sugestao.

no caso de serem bancos diferentes, eles estao no mesmo servidor? talvez seja so indicar o caminho do banco pelas schemas.

eu tenho varios bancos aqui(SQL Server) e estao todos no mesmo servidor, eu so indico o caminho e as tabelas, banco.dbo.tabela e consigo copiar, selecionar, atualizar tudo, mais uma ideia mesmo. rsrsr
Responder

09/04/2014

Daniel Hannemann

Pra CSV dá o msm erro =(
Sim. Estão no mesmo servidor. Vou tentar indicar o caminho do banco antes das tabelas, banco.dbo.tabela como vc mencionou.
Espero que dê certo, pois além de resolver o meu problema, me faria economizar muito tempo xD
Muito obrigado pela ajuda!
Responder

09/04/2014

Alex Lekao

Blz.

Eu uso muito isso... no SQL Server, acredito que seja igual ou similar a forma.

Espero que de certo.

Precisando eh so falar, estamos aqui para ajudar.

boa sorte!!!

Abraco.

Alex - Lekao
Responder

09/04/2014

Bruno Leandro

Olá

Alex no Postgre não tem ainda implementado cross database, então não é possivel utilizar select NomeBanco.NomeTabela.NomeCampo

O que da para ser feito é dblink,

outra forma é criar uma aplicação que fazer uma query com os selects em um banco e insert no outro banco
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar