Erro ao migrar quantidade muito extensa de informações de uma tabela do PostgreSQL para TXT
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.
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
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
Curtidas 0
Respostas
Jair N.
08/04/2014
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?
pelo "pg_dump"
Essa exportação que você está utilizando, como ela é feita?
GOSTEI 0
Daniel Hannemann
08/04/2014
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:
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).
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).
GOSTEI 0
Alex Lekao
08/04/2014
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
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
GOSTEI 0
Daniel Hannemann
08/04/2014
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
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
GOSTEI 0
Alex Lekao
08/04/2014
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
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
GOSTEI 0
Daniel Hannemann
08/04/2014
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!
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!
GOSTEI 0
Alex Lekao
08/04/2014
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
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
GOSTEI 0
Bruno Leandro
08/04/2014
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
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
GOSTEI 0