Muchas gracias Alvaro, que despiole!!!! voy a tener que hacer algo así. Saludos
Guillermo Villanueva El 19 de abril de 2013 16:16, Alvaro Herrera <[email protected]>escribió: > Guillermo E. Villanueva escribió: > > Amigos, heredé una base de datos que está codificada en LATIN1 > > Intenté hacer backup de algunas tablas para llevarlas de un server a > otro. > > En ambos casos está en LATIN1 > > Al backup lo hice generando INSERTs > > El mismo backup ya me genera el archivo con seteos preliminares como : > > SET client_encoding = 'LATIN1'; > > Y la sorpresa viene cuando ejecuto los inserts (lo hago desde pgAdmin) > > guarda mal los caracteres especiales como ñ á é etc > > en cambio si modifico el seteo pasándolo a : > > SET client_encoding = 'UTF8'; > > Todo se guarda ok > > > > Porqueeee si la base está en LATIN1 y el cliente estaba en LATIN1, no se > > suponía que debía guardar bien así? > > Desde ya les agradezco si me pueden aclarar un poquito el panorama > > Seguramente lo que sucede es que los datos realmente no están en Latin1 > porque las aplicaciones han estado hablando en UTF8 todo el tiempo. Si > hubieras declarado client_encoding=utf8 el sistema habría hecho > conversión de los bytes que llegaban de la aplicación y los habría > ingresado en Latin1. Pero no lo hiciste; y Latin1 no tiene mecanismo de > auto-verificación, de manera que los bytes que recibe son los que > inserta, sin posibilidad de verificar que "tienen sentido". > > UTF8 es distinto no sólo porque los caracteres se representan diferente, > sino también tiene más redundancia en la representación de los > caracteres, de manera que si tratas de insertar datos que en realidad > están en Latin1 (por ejemplo), puede darse cuenta que a la secuencia le > faltan bytes y rechaza la cadena como no válida. > > > Tu solución es tratar de importar los datos en UTF8 y verificar que todo > está correcto. Si hay algo que falla la inserción, considera esos datos > restantes como si estuvieran en Latin1 (client_encoding=latin1). Luego > de eso deberías tener todos los datos con la codificación correcta. > A mí me tocó enfrentar este mismo problema, donde había una mezcla de > UTF8 válido (99% de los datos) y Latin1. Lo que hice fue pasar todo por > pgloader en dos pasadas; la primera asumía encoding utf8. El 1% fue > rechazado y agregado a un archivo de fallas; la segunda pasada importaba > el archivo de fallas considerando latin1. > > -- > Álvaro Herrera http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Training & Services >
