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 Python y Perl para admitir la migración de bases de datos de Microsoft SQL Server a Amazon Aurora SQL Postgre -Compatible Edition
Creado por Dwarika Patra () y Deepesh Jayaprakash () AWS AWS
Entorno: PoC o piloto | SQLFuente: Servidor | Objetivo: Compatible con Aurora Postgre SQL |
Tipo R: redefinir la plataforma | Carga de trabajo: Microsoft; código abierto | Tecnologías: migración; bases de datos |
AWSservicios: Amazon Aurora |
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 Amazon Aurora Postgre SQL -Compatible Edition. 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 SQL del servidor a Aurora: SQL compatible con Postgre implica la conversión de esquemas, la conversión de objetos de bases de datos, la migración de datos y la carga de datos. Debido a las diferencias entre Postgre SQL 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 Postgre. SQL
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 las bases de datos, las SQL instrucciones integradas estáticas y dinámicas y la forma en que la aplicación gestiona las consultas dinámicas y los conjuntos de resultados complejos. DML
Cuando migres tu aplicación, también puedes considerar posibles mejorasAWS, como reemplazar el FTP servidor 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 podría 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 SQL consultas en línea 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 SQL controlador Postgre para Perl requiere que establezca siempre de forma explícita el atributo autocommit.
Manejo de consultas dinámicas. SQL 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 en 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 SQL del servidor y a la base de datos de 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 integral 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 base de datos para el acceso de lectura al SQL servidor y el acceso de lectura/escritura a Aurora.
Postgre SQL 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 respaldar la migración a Postgre. SQL
Las variaciones de rendimiento pueden requerir cambios en la aplicación, en las consultas de Transact SQL (TSQL) integradas, en las funciones de la base de datos y en los procedimientos almacenados.
Postgre SQL admite nombres en minúscula para los nombres de tablas, nombres de columnas y otros objetos de bases de datos.
Algunos tipos de datos, como UUID las columnas, 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 de SQL Postgre.
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: SQL compatible con Postgre, 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 (7RHEL)
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: Aurora PostgreSQL, compatible con 4.2
Sistema operativo: 7 RHEL
Arquitectura de migración
Herramientas
AWSservicios y herramientas
Aurora Postgre SQL —Compatible Edition es un motor de bases de datos relacionales totalmente gestionado, compatible con Postgre y SQL compatible con Postgre que combina la velocidad y la fiabilidad de las bases de datos comerciales de gama alta ACID con la rentabilidad de las bases de datos de código abierto. Aurora Postgre SQL reemplaza directamente a Postgre SQL y hace que sea más fácil y rentable configurar, operar y escalar las implementaciones de Postgre nuevas y existentes. SQL
AWSLa interfaz de línea de comandos (AWSCLI) es una herramienta de código abierto que permite interactuar con AWS los servicios mediante comandos de la consola de línea de comandos.
Otras herramientas
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Siga estos pasos de conversión de código para migrar su aplicación a Postgre. SQL |
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 las conexiones de su base de datos para que sean compatibles con Postgre. SQL | La mayoría de las aplicaciones de Python utilizan la biblioteca pyodbc para conectarse con las bases de datos SQL del servidor de la siguiente manera.
Convierta la conexión de la base de datos para que sea compatible con SQL Postgre de la siguiente manera.
| Desarrollador de aplicaciones |
Cambie las SQL consultas en línea a Postgre. SQL | Convierte tus SQL consultas en línea a un formato compatible con Postgre. SQL Por ejemplo, la siguiente consulta de SQL servidor recupera una cadena de una tabla.
Tras la conversión, la SQL consulta en línea SQL compatible con Postgre tiene el siguiente aspecto.
| Desarrollador de aplicaciones |
Gestione consultas dinámicas. SQL | La dinámica SQL 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 SQL consultas 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 Server) SQL
En Aurora, para realizar tareas similares, como conectarse a Postgre SQL 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 SQL base de datos de Postgre, como se muestra en el siguiente ejemplo. psycopg2 (compatible con Aurora Postgre) SQL
SQLAlchemy(Compatible con Aurora Postgre-ESQL)
| 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 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 y DBI el módulo Perl para que sean compatibles con Postgre. SQL | Las aplicaciones basadas en Perl suelen utilizar el módulo Perl, que es un DBI módulo de acceso a bases de datos estándar para el lenguaje de programación Perl. Puede usar el mismo DBI módulo con controladores diferentes para SQL Server y Postgre. SQL Para obtener más información sobre los módulos, las instalaciones y otras instrucciones de Perl necesarios, consulte la documentación de DBD: :Pg
| Desarrollador de aplicaciones |
Cambie las consultas en línea a Postgre. SQL SQL | Es posible que tu aplicación tenga SQL consultas en línea con En SQL el servidor:
Para PostgreSQL, conviértalo a:
| Desarrollador de aplicaciones |
Gestione SQL consultas dinámicas y variables de Perl. | SQLLas consultas dinámicas son SQL sentencias 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 SQL tablas se crean en función de los mejores resultados y los valores no se conocen hasta el momento de ejecución. Supongamos que las SQL consultas 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 usa una condición para determinar si la tabla existe:
A continuación, se muestra un ejemplo de gestión de variables, seguido de las SQL consultas de SQL servidor y Postgre para este caso de uso.
SQLServidor:
PostgreSQL:
El siguiente ejemplo utiliza una variable de Perl en líneaSQL, que ejecuta una SQLServidor:
PostgreSQL:
| Desarrollador de aplicaciones |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Convierta construcciones de servidor adicionales a Postgre. SQL SQL | 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 AWS servicios para mejorar el rendimiento. | Al migrar a la AWS nube, puede refinar el diseño de sus aplicaciones y bases de datos para aprovechar los AWS servicios. Por ejemplo, si las consultas de su aplicación Python, que está conectada a un servidor de bases de datos SQL compatible con Aurora Postgre, tardan más que las consultas originales de Microsoft SQL Server, podría plantearse la posibilidad de crear una fuente de datos históricos directamente a un depósito 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 tableros de mandos. | Desarrollador de aplicaciones, arquitecto de la nube |
Recursos relacionados
Información adicional
Tanto Microsoft SQL Server como Aurora Postgre SQL -Compatible- cumplen con los requisitos. 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 Server a Postgre. SQL SQL
Las siguientes secciones brindan más información sobre posibles inconsistencias.
Comparación de tipos de datos
Los cambios en los tipos de datos de SQL Server a Postgre SQL pueden provocar diferencias significativas en los datos resultantes con los que funcionan las aplicaciones. Para ver una comparación de los tipos de datos, consulte la tabla del sitio web de Sqlines
Funciones nativas o integradas SQL
El comportamiento de algunas funciones difiere entre las bases de SQL datos Server y Postgre. SQL La siguiente tabla muestra una comparación.
SQLServidor Microsoft | Descripción | Postgre SQL |
---|---|---|
| Convierte un valor de un tipo de datos a otro tipo. | Postgre SQL |
| 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 SQL consulta estructurada se organiza en secciones como la declaración, los ejecutables y el manejo de excepciones. En la siguiente tabla se comparan las SQL versiones Microsoft SQL Server y Postgre 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.
SQLServidor Microsoft | Postgre SQL |
---|---|
|
|
Otras diferencias
Inserciones masivas de filas: el SQL equivalente en Postgre 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 SQL del servidor 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: el SQL servidor lo usa como operador para la concatenación de cadenas,
+
mientras que Postgre lo usa. SQL||
Validación: debe probar y validar las SQL consultas y funciones en línea antes de usarlas en el código de la aplicación para Postgre. SQL
ORMInclusión de bibliotecas: también puede buscar incluir o reemplazar la biblioteca de conexiones de bases de datos existente con ORM bibliotecas 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.