Re: Alimentar db postgresql con db de sql server

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.

In response to

Browse pgsql-es-ayuda by date

  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