From: | Oswaldo Hernández <listas(at)soft-com(dot)es> |
---|---|
To: | Ernesto Verbanaz <ernesto(dot)verbanaz(at)syswarp(dot)com(dot)ar> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Alimentar db postgresql con db de sql server |
Date: | 2010-01-15 19:28:53 |
Message-ID: | 4B50C1F5.1040904@soft-com.es |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Ernesto Verbanaz escribió:
...
>
> Marcos:
> El motor de MSSQL viene con sus propias herramientas administrativas,
> Enterprise Manager, entre ellas. Desde esta podes manejar lo que se conoce
> como DTS (Data Transformation Services), esta viene con un editor grafico en
> el cual podes manejar varios tipos de objetos, entre ellos conexiones ODBC.
> Deberías crear un nuevo DTS, dentro de este, una conexión a tu base
> POSTGRES, y agregar un par mas de objetos, como para indicar que tablas
> queres que se repliquen, por ej.
> Una vez que tengas creado este DTS y lo hayas guardado (por ej. migra2PG ),
> deberías ejecutarlo en forma manual o si prefieres deberías crear un JOB (es
> otra utilidad de MSSQL) e invocar a el paquete DTS migra2PG, de forma
> automatizada.
> Esto es una breve reseña, creo que deberías investigar un poquito sobre como
> manejar estas utilidades.
> Te dejo algún enlace como para que sea mas claro:
>
> http://msdn.microsoft.com/en-us/library/cc917688.aspx
>
Ernesto,
Como veo que dominas SQLServer te planteo un problema que tuve en un caso parecido a este y me mareo
durante algún tiempo.
El tema, al igual que Victor, era intercambiar datos entre SqlServer y PostgreSQL. Para realizarlo
hize un script python en el que abria conexiones a ambas bases de datos, leia de una y hacia inserts
y updates en la otra. Hasta aqui todo perfecto.
El problema surgió cuando de pronto al realizar insert en postgres con los datos de sqlserver,
postgres empezo a arrojar errores del tipo 'invalid byte sequence for encoding "UTF8" ...', es
decir, me habia conectado a postgres diciendole que le enviaba los datos en utf-8 pero le estaba
enviando otra cosa.
Consulte con la empresa que administra el SQLServer y me dijeron que los datos que manejan están en
utf-8, sin embargo, despues de analizar las cadenas que obtenia de sqlserver observo asombrado que
en unos registros, por ejemplo, la palabra 'camión' venia como 'cami\xc3\xb3n' y en otros la misma
palabra llegaba como 'cami\xf3n'.
Es decir, la misma palabra en unos registros llegaba codificada en UTF-8 y en otros en WIN1252, y
todo en el mismo select !!!
La empresa en cuestión utiliza sqlserver desde una aplicación de gestión, directamente con access y
creo que el agun caso ha estado cargando archivos dbf. Posiblemente cada una de esas fuentes utiliza
codificaciones distintas.
Buscando en la red encontre que, sqlserver utiliza el encoding USC-2 y, al parecer, se traga todo lo
que le envies, este en la codificación que esté.
Para solucionarlo tuve que incluir en el script python una funcion que analiza las cadenas obtenidas
de sqlserver y transforma a utf-8 las que estan en win1252, para poder asi insertarlas en postgres
correctamente.
La pregunta es:
¿Tiene sqlserver alguna instrucción similar al set_client_encoding de postgres para que devuelva los
datos como debe?
Saludos, y disculpad este semi-ot.
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
From | Date | Subject | |
---|---|---|---|
Next Message | Grover Navia | 2010-01-15 20:39:37 | Re: Problema con TRIGGER |
Previous Message | Victor Avendaño | 2010-01-15 19:06:47 | Re: Alimentar db postgresql con db de sql server |