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.
--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo