nelsongesualdi
(usa Debian)
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?