Enviado em 02/02/2012 - 13:32h
Pessoal,
Estou com um problema que já está me pirando.
Tenho um arquivo texto, encoding ISO-8859-1, o qual preciso jogar para dentro de uma tabela no banco. Para simplificar, o arquivo tem 764 posições e criei a tabela da mesma forma. Depois de importar eu separo o que tiver que separar.
Bem, estou trabalhando com "PostgreSQL 8.4.9 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real (Debian 4.4.5-8) 4.4.5, 64-bit".
O problema:
Primeiro não conseguia importar o arquivo, porque o banco estava com encoding UTF8. Tentando com COPY, recebia a mensagem que havia uma sequencia de escape UTF8 inválida numa linha logo no ínicio do arquivo.
Daí usei
file -i <arquivo original>
para descobrir o encoding do arquivo. Descobri que é ISO-8859-1.
Então usei
iconv -fISO-8859-1 -tUTF8 <arquivo original> -o<arquivo convertido>
Seguido de novo COPY (o arquivo tem 15GB). Tudo parecia ir bem, até que na linha 11 milhões e tantos, novamente recebi a mensagem de sequencia UTF8 inválida.
Para resumir a novela, alterei o banco para ASCII, para ISO-8859-1 e fiz tudo de novo duas vezes. Novamente, na mesma linha, o mesmo problema.
Usei o sed para descobrir o que enfim havia de tão bizarro nessa linha e descobri que é simplesmente uma \
O postgre está entendendo que a barra representa uma sequencia de escape. Tentei substituir a barra no arquivo com o sed e não consegui.
Precisarei importar esse arquivo mensalmente. Preciso de uma solução que não seja um gato muito feio. Alguém tem alguma idéia?
Estou com um problema que já está me pirando.
Tenho um arquivo texto, encoding ISO-8859-1, o qual preciso jogar para dentro de uma tabela no banco. Para simplificar, o arquivo tem 764 posições e criei a tabela da mesma forma. Depois de importar eu separo o que tiver que separar.
Bem, estou trabalhando com "PostgreSQL 8.4.9 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real (Debian 4.4.5-8) 4.4.5, 64-bit".
O problema:
Primeiro não conseguia importar o arquivo, porque o banco estava com encoding UTF8. Tentando com COPY, recebia a mensagem que havia uma sequencia de escape UTF8 inválida numa linha logo no ínicio do arquivo.
Daí usei
file -i <arquivo original>
para descobrir o encoding do arquivo. Descobri que é ISO-8859-1.
Então usei
iconv -fISO-8859-1 -tUTF8 <arquivo original> -o<arquivo convertido>
Seguido de novo COPY (o arquivo tem 15GB). Tudo parecia ir bem, até que na linha 11 milhões e tantos, novamente recebi a mensagem de sequencia UTF8 inválida.
Para resumir a novela, alterei o banco para ASCII, para ISO-8859-1 e fiz tudo de novo duas vezes. Novamente, na mesma linha, o mesmo problema.
Usei o sed para descobrir o que enfim havia de tão bizarro nessa linha e descobri que é simplesmente uma \
O postgre está entendendo que a barra representa uma sequencia de escape. Tentei substituir a barra no arquivo com o sed e não consegui.
Precisarei importar esse arquivo mensalmente. Preciso de uma solução que não seja um gato muito feio. Alguém tem alguma idéia?