Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Cambie las aplicaciones de Python y Perl para que admitan la migración de bases de datos de Microsoft SQL Server a una edición compatible con PostgreSQL de Amazon Aurora
Creado por Dwarika Patra (AWS) y Deepesh Jayaprakash (AWS)
Resumen
Este patrón describe los cambios en los repositorios de aplicaciones que pueden ser necesarios al migrar bases de datos de Microsoft SQL Server a una edición compatible con Amazon Aurora PostgreSQL. El patrón asume que estas aplicaciones están basadas en Python o en Perl, y proporciona instrucciones independientes para estos lenguajes de secuencias de comandos.
La migración de bases de datos de SQL Server a una versión compatible con Aurora PostgreSQL implica la conversión de esquemas, la conversión de objetos de base de datos, la migración de datos y la carga de datos. Debido a las diferencias entre PostgreSQL y SQL Server (en relación con los tipos de datos, los objetos de conexión, la sintaxis y la lógica), la tarea de migración más difícil consiste en realizar los cambios necesarios en la base de código para que funcione correctamente con PostgreSQL.
Para una aplicación basada en Python, los objetos y clases de conexión están dispersos por todo el sistema. Además, la base de código de Python puede usar varias bibliotecas para conectarse a la base de datos. Si la interfaz de conexión a la base de datos cambia, los objetos que ejecutan las consultas en línea de la aplicación también requieren cambios.
En el caso de una aplicación basada en Perl, los cambios se refieren a los objetos de conexión, los controladores de conexión a la base de datos, las sentencias SQL integradas estáticas y dinámicas y la forma en que la aplicación gestiona las consultas DML dinámicas y complejas y los conjuntos de resultados.
Al migrar la aplicación, también puede considerar posibles mejoras en AWS, como reemplazar el servidor FTP por el acceso a Amazon Simple Storage Service (Amazon S3).
El proceso de migración de la aplicación implica los siguientes desafíos:
Objetos de conexión. Si los objetos de conexión están dispersos en el código con varias bibliotecas y llamadas a funciones, es posible que tenga que encontrar una forma generalizada de cambiarlos para que sean compatibles con PostgreSQL.
Gestión de errores o excepciones durante la recuperación o actualización de registros. Si tiene operaciones condicionales de creación, lectura, actualización y eliminación (CRUD) en la base de datos que devuelven variables, conjuntos de resultados o marcos de datos, cualquier error o excepción puede provocar errores de aplicación con efectos en cascada. Estas deben gestionarse con cuidado, con las validaciones adecuadas y ahorrándose puntos. Uno de estos puntos de ahorro es llamar a consultas SQL integradas de gran tamaño o a objetos de bases de datos dentro de bloques
BEGIN...EXCEPTION...END
.Controlar las transacciones y su validación. Esto incluye las confirmaciones y anulaciones manuales y automáticas. El controlador PostgreSQL para Perl requiere que siempre se establezca de forma explícita el atributo autocommit.
Manejo de consultas SQL dinámicas. Esto requiere una sólida comprensión de la lógica de consultas y pruebas iterativas para garantizar que las consultas funcionen según lo esperado.
Desempeño. Debe asegurarse de que los cambios en el código no reduzcan el rendimiento de la aplicación.
Este patrón explica el proceso de conversión en detalle.
Requisitos previos y limitaciones
Requisitos previos
Conocimientos prácticos de la sintaxis de Python y Perl.
Conocimientos básicos de SQL Server y PostgreSQL.
Comprensión de la arquitectura de aplicaciones existente.
Acceda al código de su aplicación, a la base de datos de SQL Server y a la base de datos PostgreSQL.
Acceda al entorno de desarrollo Windows o Linux (u otro tipo de Unix) con credenciales para desarrollar, probar y validar los cambios en las aplicaciones.
Para una aplicación basada en Python, las bibliotecas de Python estándar que pueda necesitar la aplicación, como Pandas para gestionar marcos de datos y psycopg2 o para conexiones a bases de datos. SQLAlchemy
Para una aplicación basada en Perl, se requieren paquetes de Perl con bibliotecas o módulos dependientes. El módulo Comprehensive Perl Archive Network (CPAN) es compatible con la mayoría de los requisitos de las aplicaciones.
Todas las bibliotecas o módulos personalizados dependientes necesarios.
Credenciales de bases de datos para acceso de lectura a SQL Server y acceso de lectura y escritura a Aurora.
PostgreSQL para validar y depurar los cambios en las aplicaciones con los servicios y los usuarios.
Acceso a herramientas de desarrollo durante la migración de aplicaciones, como Visual Studio Code, Sublime Text o pgAdmin.
Limitaciones
Algunas versiones, módulos, bibliotecas y paquetes de Python o Perl no son compatibles con el entorno de nube.
Algunas bibliotecas y marcos de terceros utilizados para SQL Server no se pueden reemplazar para admitir la migración a PostgreSQL.
Las variaciones de rendimiento pueden requerir cambios en la aplicación, en las consultas de Transact-SQL (T-SQL) integradas, en las funciones de las bases de datos y en los procedimientos almacenados.
PostgreSQL admite nombres en minúsculas para nombres de tablas, nombres de columnas y otros objetos de bases de datos.
Algunos tipos de datos, como las columnas UUID, se almacenan únicamente en minúsculas. Las aplicaciones Python y Perl deben gestionar estas diferencias entre mayúsculas y minúsculas.
Las diferencias de codificación de caracteres deben gestionarse con el tipo de datos correcto para las columnas de texto correspondientes de la base de datos PostgreSQL.
Versiones de producto
Python 3.6 o posterior (usa la versión compatible con su sistema operativo)
Perl 5.8.3 o posterior (utilice la versión compatible con su sistema operativo)
Aurora, compatible con PostgreSQL, edición 4.2 o posterior (consulte los detalles)
Arquitectura
Pila de tecnología de origen
Lenguaje de secuencias de comandos (programación de aplicaciones): Python 2.7 o posterior, o Perl 5.8
Base de datos: Microsoft SQL Server versión 13
Sistema operativo: Red Hat Enterprise Linux (RHEL) 7
Pila de tecnología de destino
Lenguaje de secuencias de comandos (programación de aplicaciones): Python 3.6 o posterior de Perl
Base de datos: Compatible con Aurora PostgreSQL
Sistema operativo: RHEL 7
Arquitectura de migración

Herramientas
Servicios y herramientas de AWS
La edición de Amazon Aurora compatible con PostgreSQL es un motor de bases de datos relacionales, completamente administrado, compatible con PostgreSQL y conforme a ACID, que combina la velocidad y la fiabilidad de las bases de datos comerciales de tecnología avanzada con la sencillez y la rentabilidad de las bases de datos de código abierto. Aurora PostgreSQL es un reemplazo instántaneo para PostgreSQL que simplifica y hace más rentable configurar, usar y escalar las implementaciones de PostgreSQL nuevas y existentes.
La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
Otras herramientas
Bibliotecas de conexión a bases de datos de Python
y PostgresSQL, como psycopg2 y SQLAlchemy Perl
y sus módulos de DBI
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Siga estos pasos de conversión de código para migrar su aplicación a PostgreSQL. |
Las siguientes epics proporcionan instrucciones detalladas para algunas de estas tareas de conversión para aplicaciones de Python y Perl. | Desarrollador de aplicaciones |
Use una lista de verificación para cada paso de la migración. | Añada lo siguiente a la lista de verificación para cada paso de la migración de la aplicación, incluido el paso final:
| Desarrollador de aplicaciones |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Analice su base de código Python existente. | Su análisis debe incluir lo siguiente para facilitar el proceso de migración de la aplicación:
| Desarrollador de aplicaciones |
Convierta sus conexiones de bases de datos para que sean compatibles con PostgreSQL. | La mayoría de las aplicaciones de Python utilizan la biblioteca pyodbc para conectarse con las bases de datos de SQL Server de la siguiente manera.
Convierta la conexión de base de datos para que sea compatible con PostgreSQL de la siguiente manera.
| Desarrollador de aplicaciones |
Cambie las consultas SQL en línea a PostgreSQL. | Convierta sus consultas SQL en línea a un formato compatible con PostgreSQL. Por ejemplo, la siguiente consulta de SQL Server recupera una cadena de una tabla.
Tras la conversión, la consulta SQL en línea compatible con PostgreSQL tiene el siguiente aspecto.
| Desarrollador de aplicaciones |
Gestione consultas SQL dinámicas. | El SQL dinámico puede estar presente en un script o en varios scripts de Python. Los ejemplos anteriores mostraron cómo utilizar la función de reemplazo de cadenas de Python para insertar variables con el fin de crear consultas SQL dinámicas. Un enfoque alternativo consiste en añadir variables a la cadena de consulta siempre que sea aplicable. En el ejemplo siguiente, la cadena de consulta se construye sobre la marcha en función de los valores devueltos por una función.
Estos tipos de consultas dinámicas son muy comunes durante la migración de aplicaciones. Siga estos pasos para gestionar consultas dinámicas:
| Desarrollador de aplicaciones |
Gestione los conjuntos de resultados, las variables y los marcos de datos. | Para Microsoft SQL Server, se utilizan métodos de Python como pyodbc (Microsoft SQL Server)
En Aurora, para realizar tareas similares, como conectarse a PostgreSQL y obtener conjuntos de resultados, puede usar psycopg2 o. SQLAlchemy Estas bibliotecas de Python proporcionan el módulo de conexión y el objeto de cursor para recorrer los registros de la base de datos PostgreSQL, como se muestra en el siguiente ejemplo. psycopg2 (Aurora compatible con PostgreSQL)
SQLAlchemy (Compatible con Aurora PostgreSQL)
| Desarrollador de aplicaciones |
Pruebe la aplicación durante y después de la migración. | La prueba de la aplicación Python migrada es un proceso continuo. Como la migración incluye cambios en los objetos de conexión (psycopg2 o SQLAlchemy), la gestión de errores, nuevas funciones (marcos de datos), cambios en el SQL en línea, funcionalidades de copia masiva (
| Desarrollador de aplicaciones |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Analice su base de código Perl existente. | Su análisis debe incluir lo siguiente para facilitar el proceso de migración de la aplicación. Debe identificar:
| Desarrollador de aplicaciones |
Convierta las conexiones de la aplicación Perl y el módulo DBI para que sean compatibles con PostgreSQL. | Las aplicaciones basadas en Perl suelen utilizar el módulo DBI de Perl, que es un módulo de acceso a bases de datos estándar para el lenguaje de programación Perl. Puede usar el mismo módulo DBI con controladores diferentes para SQL Server y PostgreSQL. Para obtener más información sobre los módulos de Perl necesarios, las instalaciones y otras instrucciones, consulte la documentación de DBD::Pg
| Desarrollador de aplicaciones |
Cambie las consultas SQL en línea a PostgreSQL. | Es posible que su aplicación tenga consultas SQL en línea con En SQL Server:
Para PostgreSQL, conviértalo a:
| Desarrollador de aplicaciones |
Gestione consultas SQL dinámicas y variables de Perl. | Las consultas SQL dinámicas son sentencias SQL que se crean durante el tiempo de ejecución de la aplicación. Estas consultas se crean de forma dinámica cuando la aplicación está en ejecución, en función de determinadas condiciones, por lo que el texto completo de la consulta no se conoce hasta el tiempo de ejecución. Un ejemplo es una aplicación de análisis financiero que analiza las 10 principales acciones a diario, y estas acciones cambian todos los días. Las tablas SQL se crean en función de los mejores resultados y los valores no se conocen hasta el tiempo de ejecución. Supongamos que las consultas SQL en línea de este ejemplo se pasan a una función contenedora para obtener los resultados establecidos en una variable y, a continuación, una variable utiliza una condición para determinar si la tabla existe:
A continuación, se muestra un ejemplo de gestión de variables, seguido de las consultas de SQL Server y PostgreSQL para este caso de uso.
SQL Server:
PostgreSQL:
En el siguiente ejemplo, se utiliza una variable de Perl en SQL en línea, que ejecuta una sentencia SQL Server:
PostgreSQL:
| Desarrollador de aplicaciones |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Convierta construcciones adicionales de SQL Server a PostgreSQL. | Los siguientes cambios se aplican a todas las aplicaciones, independientemente del lenguaje de programación.
| Desarrollador de aplicaciones |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Aproveche los servicios de AWS para mejorar el rendimiento. | Al migrar a la nube de AWS, puede refinar el diseño de sus aplicaciones y bases de datos para aprovechar los servicios de AWS. Por ejemplo, si las consultas de su aplicación Python, que está conectada a un servidor de bases de datos compatible con Aurora PostgreSQL, tardan más que las consultas originales de Microsoft SQL Server, podría considerar la posibilidad de crear una fuente de datos históricos directamente a un bucket de Amazon Simple Storage Service (Amazon S3) desde el servidor Aurora y utilizar consultas SQL basadas en Amazon Athena para generar informes y consultas de datos analíticos para sus usuarios. cuadros de mando. | Desarrollador de aplicaciones, arquitecto de la nube |
Recursos relacionados
Información adicional
Tanto Microsoft SQL Server como Aurora PostgreSQL son compatibles con ANSI SQL. Sin embargo, debe tener en cuenta cualquier incompatibilidad en la sintaxis, los tipos de datos de columnas, las funciones nativas específicas de las bases de datos, las inserciones masivas y la distinción entre mayúsculas y minúsculas cuando migre su aplicación de Python o Perl de SQL Server a PostgreSQL.
Las siguientes secciones brindan más información sobre posibles inconsistencias.
Comparación de tipos de datos
Los cambios en el tipo de datos de SQL Server a PostgreSQL pueden provocar diferencias significativas en los datos resultantes en los que funcionan las aplicaciones. Para ver una comparación de los tipos de datos, consulte la tabla del sitio web de Sqlines
Funciones SQL nativas o integradas
El comportamiento de algunas funciones difiere entre las bases de datos de SQL Server y PostgreSQL. La siguiente tabla muestra una comparación.
Microsoft SQL Server | Descripción | PostgreSQL |
---|---|---|
| Convierte un valor de un tipo de datos a otro tipo. | PostgreSQL |
| Devuelve la fecha y la hora del sistema de base de datos actual, en un formato |
|
| Añade un intervalo de fecha y hora a una fecha. |
|
| Convierte un valor en un formato de datos específico. |
|
| Devuelve la diferencia entre dos campos de fecha. |
|
| Limita el número de filas de un conjunto de resultados de |
|
Bloques anónimos
Una consulta SQL estructurada se organiza en secciones como la declaración, los ejecutables y el manejo de excepciones. En la siguiente tabla se comparan las versiones Microsoft SQL Server y PostgreSQL de un bloque anónimo simple. En el caso de bloques anónimos complejos, le recomendamos que llame una función de base de datos personalizada en su aplicación.
Microsoft SQL Server | PostgreSQL |
---|---|
|
|
Otras diferencias
Inserciones masivas de filas: el equivalente en PostgreSQL de la utilidad bcp de Microsoft SQL Server
es COPY . Distinción entre mayúsculas y minúsculas: los nombres de las columnas distinguen entre mayúsculas y minúsculas en PostgreSQL, por lo que debe convertir los nombres de las columnas de SQL Server a minúsculas o mayúsculas. Esto se convierte en un factor al extraer o comparar datos, o al colocar los nombres de las columnas en los conjuntos de resultados o las variables. El siguiente ejemplo identifica las columnas en las que los valores se pueden almacenar en mayúsculas o minúsculas.
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'";
Concatenación: SQL Server usa
+
como operador para la concatenación de cadenas, mientras que PostgreSQL usa||
.Validación: debe probar y validar las consultas y funciones de SQL en línea antes de usarlas en el código de la aplicación para PostgreSQL.
Inclusión de la biblioteca ORM: también puede buscar incluir o reemplazar la biblioteca de conexiones de bases de datos existente con bibliotecas ORM de Python, como SQLAlchemy
PynomoDB . Esto ayudará a consultar y manipular fácilmente los datos de una base de datos utilizando un paradigma orientado a objetos.