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 - Recomendaciones de AWS

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

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

Migración de una aplicación de Perl o Python con SQL Server a Aurora compatible con Postgre SQL

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

TareaDescripciónHabilidades requeridas

Siga estos pasos de conversión de código para migrar su aplicación a Postgre. SQL

  1. Configure ODBC controladores y bibliotecas específicos de la base de datos para Postgre. SQL Por ejemplo, puede usar uno de los CPAN módulos para Perl y pyodbc, psycopg2 o Python. SQLAlchemy

  2. Convierta los objetos de la base de datos mediante estas bibliotecas para conectarse a Aurora Compatible con Postgre. SQL

  3. Aplique los cambios de código en los módulos de aplicación existentes para obtener sentencias T compatibles. SQL

  4. Reescriba las llamadas a funciones específicas de la base de datos y los procedimientos almacenados en el código de la aplicación.

  5. Controle los cambios en las variables de la aplicación y sus tipos de datos que se utilizan para SQL las consultas en línea.

  6. Gestione funciones específicas de bases de datos incompatibles.

  7. Realice end-to-end las pruebas del código de la aplicación convertida para la migración de la base de datos.

  8. Compare los resultados de Microsoft SQL Server con los de la aplicación que migró a PostgreSQL.

  9. Realice una evaluación comparativa del rendimiento de las aplicaciones entre Microsoft SQL Server y SQL Postgre.

  10. Revise los procedimientos almacenados o las SQL sentencias T en línea utilizadas por la aplicación para mejorar el rendimiento.

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:

  • Revise la SQL documentación de Postgre para asegurarse de que todos los cambios sean compatibles con el estándar de Postgre. SQL

  • Compruebe si hay valores enteros y flotantes en las columnas.

  • Identifique el número de filas insertadas, actualizadas y extraídas, junto con los nombres de las columnas y las marcas de fecha y hora. Puede utilizar una utilidad de diferencias o escribir un script para automatizar estas comprobaciones.

  • Realice las comprobaciones de rendimiento para obtener SQL estados de cuenta en línea de gran tamaño y compruebe el rendimiento general de la aplicación.

  • Compruebe la correcta gestión de los errores en las operaciones de la base de datos y la correcta salida del programa mediante el uso de varios bloques try/catch.

  • Asegúrese de que se hayan implementado los procesos de registro adecuados.

Desarrollador de aplicaciones
TareaDescripciónHabilidades 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:

  • Identifique todos los objetos de conexión en el código.

  • Identifique todas las SQL consultas en línea incompatibles (como las SQL sentencias T y los procedimientos almacenados) y analice los cambios necesarios.

  • Revise la documentación del código y realice un seguimiento del flujo de control para comprender la funcionalidad del código. Esto será útil más adelante, cuando pruebes la aplicación para comparar el rendimiento o la carga.

  • Comprenda el propósito de la aplicación para poder probarla eficazmente después de la conversión de la base de datos. La mayoría de las aplicaciones de Python que son candidatas a la conversión con migraciones de bases de datos son fuentes que cargan datos de otras fuentes en tablas de bases de datos o extractores que recuperan datos de las tablas y los transforman en diferentes formatos de salida (como CSVJSON, o archivos planos) que son adecuados para crear informes o realizar API llamadas para realizar validaciones. 

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.

import pyodbc .... try: conn_string = "Driver=ODBC Driver 17 for SQL Server;UID={};PWD={};Server={};Database={}".format (conn_user, conn_password, conn_server, conn_database) conn = pyodbc.connect(conn_string) cur = conn.cursor() result = cur.execute(query_string) for row in result: print (row) except Exception as e: print(str(e))

Convierta la conexión de la base de datos para que sea compatible con SQL Postgre de la siguiente manera.

import pyodbc import psycopg2 .... try: conn_string = ‘postgresql+psycopg2://’+ conn_user+’:’+conn_password+’@’+conn_server+’/’+conn_database conn = pyodbc.connect(conn_string, connect_args={‘options’:’-csearch_path=dbo’}) cur = conn.cursor() result = cur.execute(query_string) for row in result: print (row) except Exception as e: print(str(e))
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.

dtype = “type1” stm = ‘“SELECT TOP 1 searchcode FROM TypesTable (NOLOCK) WHERE code=”’ + “’” + str(dtype) + “’” # For Microsoft SQL Server Database Connection engine = create_engine(‘mssql+pyodbc:///?odbc_connect=%s’ % urllib.parse.quote_plus(conn_string), connect_args={‘connect_timeout’:login_timeout}) conn = engine_connect() rs = conn.execute(stm) for row in rs: print(row)

Tras la conversión, la SQL consulta en línea SQL compatible con Postgre tiene el siguiente aspecto.

dtype = “type1” stm = ‘“SELECT searchcode FROM TypesTable WHERE code=”’ + “’” + str(dtype) + “’ LIMIT 1” # For PostgreSQL Database Connection engine = create_engine(‘postgres+psycopg2://%s’ %conn_string, connect_args={‘connect_timeout’:login_timeout}) conn = engine.connect() rs = conn.execute(stm) for row in rs: print(row)
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.

query = ‘“SELECT id from equity e join issues i on e.permId=i.permId where e.id’” query += get_id_filter(ids) + “ e.id is NOT NULL

Estos tipos de consultas dinámicas son muy comunes durante la migración de aplicaciones. Siga estos pasos para gestionar consultas dinámicas:

  • Compruebe la sintaxis general (por ejemplo, la sintaxis de la sentencia SELECT con una cláusula JOIN).

  • Compruebe todos los nombres de variables o columnas utilizados en la consulta, como i y id.

  • Compruebe las funciones, los argumentos y los valores devueltos utilizados en la consulta (por ejemplo, get_id_filter y su argumento ids).

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 fetchone() o fetchall() para recuperar el conjunto de resultados de la base de datos. También puede usar fetchmany(size) y especificar el número de registros que se van a devolver del conjunto de resultados. Para ello, puede utilizar el objeto de conexión pyodbc como se muestra en el siguiente ejemplo.

pyodbc (Microsoft Server) SQL

import pyodbc server = 'tcp:myserver.database.windows.net' database = 'exampledb' username = 'exampleusername' password = 'examplepassword' conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password) cursor = conn.cursor() cursor.execute("SELECT * FROM ITEMS") row = cursor.fetchone() while row: print(row[0]) row = cursor.fetchone()

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

import psycopg2 query = "SELECT * FROM ITEMS;" //Initialize variables host=dbname=user=password=port=sslmode=connect_timeout="" connstring = "host='{host}' dbname='{dbname}' user='{user}' \ password='{password}'port='{port}'".format(host=host,dbname=dbname,\ user=user,password=password,port=port) conn = psycopg2.connect(connstring) cursor = conn.cursor() cursor.execute(query) column_names = [column[0] for column in cursor.description] print("Column Names: ", column_names) print("Column values: " for row in cursor: print("itemid :", row[0]) print("itemdescrption :", row[1]) print("itemprice :", row[3]))

SQLAlchemy(Compatible con Aurora Postgre-ESQL)

from sqlalchemy import create_engine from pandas import DataFrame conn_string = 'postgresql://core:database@localhost:5432/exampledatabase' engine = create_engine(conn_string) conn = engine.connect() dataid = 1001 result = conn.execute("SELECT * FROM ITEMS") df = DataFrame(result.fetchall()) df.columns = result.keys() df = pd.DataFrame() engine.connect() df = pd.read_sql_query(sql_query, engine, coerce_float=False) print(“df=”, df)
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 (bcpen lugar deCOPY) y SQL cambios similares, debe probarse detenidamente durante y después de la migración de la aplicación. Consultar si:

  • Condiciones y manejo del error 

  • Algún desajuste en los registros tras la migración

  • Actualizaciones o eliminaciones de registros

  • Tiempo necesario para poder ejecutar la aplicación 

Desarrollador de aplicaciones
TareaDescripciónHabilidades 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:

  • Cualquier código o código basado en la configuración INI

  • Controladores Perl estándar de conectividad abierta de bases de datos (ODBC) específicos para bases de datos o cualquier controlador personalizado

  • Se requieren cambios de código para las consultas en línea y en T SQL

  • Interacciones entre varios módulos de Perl (por ejemplo, un único objeto de ODBC conexión de Perl al que varios componentes funcionales llaman o utilizan)

  • Manejo de conjuntos de datos y conjuntos de resultados

  • Bibliotecas de Perl externas y dependientes

  • Cualquiera APIs que se utilice en la aplicación

  • Compatibilidad de la versión Perl y compatibilidad de los controladores con Aurora SQL Postgre: compatible

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. El siguiente ejemplo se conecta a Aurora Postgre SQL -Compatible at. exampletest-aurorapg-database.cluster-sampleclusture.us-east-.rds.amazonaws.com

#!/usr/bin/perl use DBI; use strict; my $driver = "Pg"; my $hostname = “exampletest-aurorapg-database-sampleclusture.us-east.rds.amazonaws.com” my $dsn = "DBI:$driver: dbname = $hostname;host = 127.0.0.1;port = 5432"; my $username = "postgres"; my $password = "pass123"; $dbh = DBI->connect("dbi:Pg:dbname=$hostname;host=$host;port=$port;options=$options", $username, $password, {AutoCommit => 0, RaiseError => 1, PrintError => 0} );
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 SELECT DELETEUPDATE, y sentencias similares que incluyan cláusulas de consulta que SQL Postgre no admite. Por ejemplo, consulta palabras clave como Postgre TOP y NOLOCK no son compatibles. SQL En los siguientes ejemplos, se muestra cómo se pueden gestionar TOP, NOLOCK y variables booleanas.

En SQL el servidor:

$sqlStr = $sqlStr . "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id \ FROM active_student_record b WITH (NOLOCK) \ INNER JOIN student_contributor c WITH (NOLOCK) on c.contributor_id = b.c_st)

Para PostgreSQL, conviértalo a:

$sqlStr = $sqlStr . "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id \ FROM active_student_record b INNER JOIN student_contributor c \ on c.contributor_id = b.c_student_contr_id WHERE b_current_1 is true \ LIMIT $numofRecords)"
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:

  • Si la tabla existe, no la cree; procésela.

  • Si la tabla no existe, créela y, a continuación, procésela.

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.

my $tableexists = db_read( arg 1, $sql_qry, undef, 'writer'); my $table_already_exists = $tableexists->[0]{table_exists}; if ($table_already_exists){ # do some thing } else { # do something else }

SQLServidor:

my $sql_qry = “SELECT OBJECT_ID('$backendTable', 'U') table_exists", undef, 'writer')";

PostgreSQL:

my $sql_qry = “SELECT TO_REGCLASS('$backendTable', 'U') table_exists", undef, 'writer')";

El siguiente ejemplo utiliza una variable de Perl en líneaSQL, que ejecuta una SELECT sentencia con JOIN a para obtener la clave principal de la tabla y la posición de la columna clave.

SQLServidor:

my $sql_qry = "SELECT column_name', character_maxi mum_length \ FROM INFORMATION_SCHEMA.COLUMNS \ WHERE TABLE_SCHEMA='$example_schemaInfo' \ AND TABLE_NAME='$example_table' \ AND DATA_TYPE IN ('varchar','nvarchar');";

PostgreSQL:

my $sql_qry = "SELECT c1.column_name, c1.ordinal_position \ FROM information_schema.key_column_usage AS c LEFT \ JOIN information_schema.table_constraints AS t1 \ ON t1.constraint_name = c1.constraint_name \ WHERE t1.table_name = $example_schemaInfo'.'$example_table’ \ AND t1.constraint_type = 'PRIMARY KEY' ;";
Desarrollador de aplicaciones
TareaDescripciónHabilidades 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.

  • Califique los objetos de base de datos que utiliza su aplicación con nombres de esquema nuevos y adecuados.

  • Utilice LIKElos operadores para hacer coincidir mayúsculas de minúsculas con la función de intercalación de Postgre. SQL

  • Gestione funciones específicas de bases de datos no compatibles, como DATEDIFF, DATEADD, GETDATE, CONVERT y los operadores CAST. Para ver funciones equivalentes SQL compatibles con Postgre, consulte Funciones nativas o integradas SQL en la sección de información adicional. 

  • Maneje los valores booleanos en las declaraciones comparativas.

  • Maneje los valores de retorno de las funciones. Pueden ser conjuntos de registros, marcos de datos, variables y valores booleanos. Manéjelas de acuerdo con los requisitos de su aplicación y para que sean compatibles con Postgre. SQL

  • Gestione los bloques anónimos (por ejemploBEGIN TRAN) con nuevas funciones de Postgre definidas por el usuario. SQL

  • Convierta inserciones masivas en filas. El SQL equivalente en Postgre de la utilidad SQL Server bulk copy (bcp), que se invoca desde dentro de la aplicación, es. COPY

  • Convierta los operadores de concatenación de columnas. SQLEl servidor usa + para la concatenación de cadenas, pero Postgre usa. SQL ||

Desarrollador de aplicaciones
TareaDescripciónHabilidades 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

CAST 

Convierte un valor de un tipo de datos a otro tipo.

Postgre SQL type :: operator

GETDATE()

Devuelve la fecha y la hora del sistema de base de datos actual, en un formato YYYY-MM-DD hh:mm:ss.mmm.

CLOCK_TIMESTAMP

DATEADD

Añade un intervalo de fecha y hora a una fecha.

INTERVAL expression

CONVERT

Convierte un valor en un formato de datos específico.

TO_CHAR

DATEDIFF

Devuelve la diferencia entre dos campos de fecha.

DATE_PART

TOP

Limita el número de filas de un conjunto de resultados de SELECT.

LIMIT/FETCH

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

my $sql_qry1= my $sql_qry2 = my $sqlqry = "BEGIN TRAN $sql_qry1 $sql_qry2 if @\@error !=0 ROLLBACK TRAN else COMIT TRAN";
my $sql_qry1= my $sql_qry2 = my $sql_qry = " DO \$\$ BEGIN $header_sql $content_sql END \$\$";

 

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 SQLAlchemyPynomoDB. Esto ayudará a consultar y manipular fácilmente los datos de una base de datos utilizando un paradigma orientado a objetos.