sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo migrar una base de datos PostgreSQL a una SQLServer?

Debería poder encontrar información útil en la respuesta aceptada en esta página de Serverfault:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.

Si puede convertir el esquema sin los datos, puede acortar los pasos para los datos usando este comando:

pg_dump --data-only --column-inserts your_db_name > data_load_script.sql

Esta carga será bastante lenta, pero --column-inserts genera las instrucciones INSERT más genéricas posibles para cada fila de datos y debería ser compatible.

EDITAR:Sugerencias para convertir el esquema a continuación:

Comenzaría por volcar el esquema, pero eliminando todo lo que tenga que ver con la propiedad o los permisos. Esto debería ser suficiente:

pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

Edite este archivo para agregar la línea BEGIN TRANSACTION; al principio y ROLLBACK TRANSACTION; hasta el final. Ahora puede cargarlo y ejecutarlo en una ventana de consulta en SQL Server. Si recibe algún error, asegúrese de ir al final del archivo, resalte la instrucción ROLLBACK y ejecútela (pulsando F5 mientras la instrucción está resaltada).

Básicamente, debe resolver cada error hasta que el script se ejecute correctamente. Luego puede cambiar la ROLLBACK TRANSACTION para COMMIT TRANSACTION y ejecutar una última vez.

Desafortunadamente, no puedo ayudar con los errores que puede ver, ya que nunca he pasado de PostgreSQL a SQL Server, solo al revés. Sin embargo, algunas cosas que esperaría que fueran un problema (obviamente, NO es una lista exhaustiva):

  • PostgreSQL incrementa automáticamente los campos al vincular un NOT NULL INTEGER campo a una SEQUENCE usando un DEFAULT . En SQL Server, esta es una IDENTITY columna, pero no son exactamente lo mismo. No estoy seguro de si son equivalentes, pero si su esquema original está lleno de campos de "id", es posible que tenga algunos problemas. No sé si SQL Server tiene CREATE SEQUENCE , por lo que es posible que deba eliminarlos.
  • Las funciones de base de datos/procedimientos almacenados no se traducen entre plataformas RDBMS. Deberá eliminar cualquier CREATE FUNCTION declaraciones y traducir los algoritmos manualmente.
  • Tenga cuidado con la codificación del archivo de datos. Soy una persona de Linux, por lo que no tengo idea de cómo verificar la codificación en Windows, pero debe asegurarse de que lo que SQL Server espera sea el mismo que el archivo que está importando de PostgreSQL. pg_dump tiene una opción --encoding= eso le permitirá establecer una codificación específica. Me parece recordar que Windows tiende a usar codificación UTF-16 de dos bytes para Unicode donde PostgreSQL usa UTF-8. Tuve algunos problemas al pasar de SQL Server a PostgreSQL debido a la salida UTF-16, por lo que valdría la pena investigarlo.
  • El tipo de datos PostgreSQL TEXT es simplemente un VARCHAR sin una longitud máxima. En SQL Server, TEXT es... complicado (y obsoleto). Cada campo en su esquema original que se declara como TEXT deberá revisarse para obtener un tipo de datos de SQL Server adecuado.
  • SQL Server tiene tipos de datos adicionales para UNICODE datos. No estoy lo suficientemente familiarizado con él para hacer sugerencias. Solo estoy señalando que puede ser un problema.