Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Modifica le applicazioni Python e Perl per supportare la migrazione dei database da Microsoft SQL Server a Amazon Aurora PostgreSQL Compatible Edition
Creato da Dwarika Patra (AWS) e Deepesh Jayaprakash (AWS)
Riepilogo
Questo modello descrive le modifiche ai repository delle applicazioni che potrebbero essere necessarie durante la migrazione dei database da Microsoft SQL Server a Amazon Aurora PostgreSQL Compatible Edition. Il modello presuppone che queste applicazioni siano basate su Python o su Perl e fornisce istruzioni separate per questi linguaggi di scripting.
La migrazione dei database di SQL Server verso la compatibilità con Aurora PostgreSQL comporta la conversione dello schema, la conversione degli oggetti del database, la migrazione dei dati e il caricamento dei dati. A causa delle differenze tra PostgreSQL e SQL Server (relative ai tipi di dati, agli oggetti di connessione, alla sintassi e alla logica), l'attività di migrazione più difficile consiste nell'apportare le modifiche necessarie alla base di codice in modo che funzioni correttamente con PostgreSQL.
Per un'applicazione basata su Python, gli oggetti e le classi di connessione sono sparsi in tutto il sistema. Inoltre, la base di codice Python potrebbe utilizzare più librerie per connettersi al database. Se l'interfaccia di connessione al database cambia, anche gli oggetti che eseguono le query in linea dell'applicazione richiedono modifiche.
Per un'applicazione basata su Perl, le modifiche riguardano oggetti di connessione, driver di connessione al database, istruzioni SQL in linea statiche e dinamiche e il modo in cui l'applicazione gestisce query DML dinamiche complesse e set di risultati.
Quando esegui la migrazione della tua applicazione, puoi anche prendere in considerazione possibili miglioramenti su AWS, come la sostituzione del server FTP con l'accesso ad Amazon Simple Storage Service (Amazon S3).
Il processo di migrazione delle applicazioni comporta le seguenti sfide:
Oggetti di connessione. Se gli oggetti di connessione sono sparsi nel codice con più librerie e chiamate di funzioni, potrebbe essere necessario trovare un modo generalizzato per modificarli per supportare PostgreSQL.
Gestione degli errori o delle eccezioni durante il recupero o l'aggiornamento dei record. Se sul database sono presenti operazioni condizionali di creazione, lettura, aggiornamento ed eliminazione (CRUD) che restituiscono variabili, set di risultati o frame di dati, eventuali errori o eccezioni potrebbero causare errori di applicazione con effetti a cascata. Queste devono essere gestite con cura con convalide e punti di salvataggio adeguati. Uno di questi punti di salvataggio consiste nel richiamare query SQL in linea di grandi dimensioni o oggetti di database all'interno di blocchi.
BEGIN...EXCEPTION...END
Controllo delle transazioni e loro convalida. Questi includono commit e rollback manuali e automatici. Il driver PostgreSQL per Perl richiede di impostare sempre in modo esplicito l'attributo auto-commit.
Gestione di query SQL dinamiche. Ciò richiede una conoscenza approfondita della logica delle query e dei test iterativi per garantire che le query funzionino come previsto.
Prestazioni. È necessario assicurarsi che le modifiche al codice non comportino un peggioramento delle prestazioni dell'applicazione.
Questo modello spiega in dettaglio il processo di conversione.
Prerequisiti e limitazioni
Prerequisiti
Conoscenza pratica della sintassi Python e Perl.
Competenze di base in SQL Server e PostgreSQL.
Comprensione dell'architettura applicativa esistente.
Accesso al codice dell'applicazione, al database SQL Server e al database PostgreSQL.
Accesso all'ambiente di sviluppo Windows o Linux (o altro Unix) con credenziali per lo sviluppo, il test e la convalida delle modifiche alle applicazioni.
Per un'applicazione basata su Python, le librerie Python standard che l'applicazione potrebbe richiedere, come Pandas per gestire i frame di dati e psycopg2 per le connessioni al database. SQLAlchemy
Per un'applicazione basata su Perl, sono necessari pacchetti Perl con librerie o moduli dipendenti. Il modulo Comprehensive Perl Archive Network (CPAN) può supportare la maggior parte dei requisiti delle applicazioni.
Tutte le librerie o i moduli personalizzati dipendenti richiesti.
Credenziali del database per l'accesso in lettura a SQL Server e l'accesso in lettura/scrittura ad Aurora.
PostgreSQL per convalidare ed eseguire il debug delle modifiche alle applicazioni con servizi e utenti.
Accesso a strumenti di sviluppo durante la migrazione delle applicazioni come Visual Studio Code, Sublime Text o pgAdmin.
Limitazioni
Alcune versioni, moduli, librerie e pacchetti di Python o Perl non sono compatibili con l'ambiente cloud.
Alcune librerie e framework di terze parti utilizzati per SQL Server non possono essere sostituiti per supportare la migrazione PostgreSQL.
Le variazioni delle prestazioni potrebbero richiedere modifiche all'applicazione, alle query Transact-SQL (T-SQL) in linea, alle funzioni del database e alle stored procedure.
PostgreSQL supporta nomi minuscoli per nomi di tabelle, nomi di colonne e altri oggetti di database.
Alcuni tipi di dati, come le colonne UUID, vengono memorizzati solo in lettere minuscole. Le applicazioni Python e Perl devono gestire tali differenze di casi.
Le differenze di codifica dei caratteri devono essere gestite con il tipo di dati corretto per le colonne di testo corrispondenti nel database PostgreSQL.
Versioni del prodotto
Python 3.6 o versione successiva (usa la versione che supporta il tuo sistema operativo)
Perl 5.8.3 o versione successiva (usa la versione che supporta il tuo sistema operativo)
Aurora PostgreSQL Compatible Edition 4.2 o versione successiva (vedi dettagli)
Architettura
Stack tecnologico di origine
Linguaggio di scripting (programmazione di applicazioni): Python 2.7 o successivo o Perl 5.8
Database: Microsoft SQL Server versione 13
Sistema operativo: Red Hat Enterprise Linux (RHEL) 7
Stack tecnologico Target
Linguaggio di scripting (programmazione di applicazioni): Python 3.6 o successivo o Perl 5.8 o successivo
Database: Aurora PostgreSQL compatibile 4.2
Sistema operativo: RHEL 7
Architettura di migrazione

Strumenti
Servizi e strumenti AWS
Aurora PostgreSQL—Compatible Edition è un motore di database relazionale completamente gestito, compatibile con PostgreSQL e conforme ad ACID che combina la velocità e l'affidabilità dei database commerciali di fascia alta con l'economicità dei database open source. Aurora PostgreSQL è un sostituto immediato di PostgreSQL e semplifica e rende più conveniente configurare, utilizzare e scalare le implementazioni PostgreSQL nuove ed esistenti.
AWS Command Line Interface (AWS CLI) è uno strumento open source che consente di interagire con i servizi AWS utilizzando i comandi nella shell della riga di comando.
Altri strumenti
Librerie di connessione al database Python
e PostgressSQL come psycopg2 e SQLAlchemy Terminale interattivo PostgreSQL (psql
)
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Segui questi passaggi di conversione del codice per migrare la tua applicazione a PostgreSQL. |
I seguenti poemi epici forniscono istruzioni dettagliate per alcune di queste attività di conversione per applicazioni Python e Perl. | Sviluppatore di app |
Usa una lista di controllo per ogni fase della migrazione. | Aggiungi quanto segue alla tua lista di controllo per ogni fase della migrazione delle applicazioni, inclusa la fase finale:
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Analizza la tua base di codice Python esistente. | L'analisi dovrebbe includere quanto segue per facilitare il processo di migrazione delle applicazioni:
| Sviluppatore di app |
Converti le connessioni al database per supportare PostgreSQL. | La maggior parte delle applicazioni Python utilizza la libreria pyodbc per connettersi ai database di SQL Server come segue.
Converti la connessione al database per supportare PostgreSQL come segue.
| Sviluppatore di app |
Cambia le query SQL in linea in PostgreSQL. | Converti le tue query SQL in linea in un formato compatibile con PostgreSQL. Ad esempio, la seguente query di SQL Server recupera una stringa da una tabella.
Dopo la conversione, la query SQL in linea compatibile con PostgreSQL ha il seguente aspetto.
| Sviluppatore di app |
Gestisci le query SQL dinamiche. | L'SQL dinamico può essere presente in uno script o in più script Python. Gli esempi precedenti hanno mostrato come utilizzare la funzione di sostituzione delle stringhe di Python per inserire variabili per la costruzione di query SQL dinamiche. Un approccio alternativo consiste nell'aggiungere la stringa di query con variabili laddove applicabile. Nell'esempio seguente, la stringa di query viene costruita al volo in base ai valori restituiti da una funzione.
Questi tipi di interrogazioni dinamiche sono molto comuni durante la migrazione delle applicazioni. Segui questi passaggi per gestire le query dinamiche:
| Sviluppatore di app |
Gestisci set di risultati, variabili e frame di dati. | Per Microsoft SQL Server, si utilizzano metodi Python come pyodbc (Microsoft SQL Server)
In Aurora, per eseguire attività simili come la connessione a PostgreSQL e il recupero dei set di risultati, puoi usare psycopg2 o. SQLAlchemy Queste librerie Python forniscono il modulo di connessione e l'oggetto cursore da attraversare tra i record del database PostgreSQL, come mostrato nell'esempio seguente. psycopg2 (compatibile con Aurora PostgreSQL)
SQLAlchemy (Compatibile con Aurora PostgreSQL)
| Sviluppatore di app |
Testa la tua applicazione durante e dopo la migrazione. | Il test dell'applicazione Python migrata è un processo continuo. Poiché la migrazione include modifiche agli oggetti di connessione (psycopg2 o SQLAlchemy), gestione degli errori, nuove funzionalità (frame di dati), modifiche SQL in linea, funzionalità di copia in blocco (
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Analizza la tua base di codice Perl esistente. | L'analisi dovrebbe includere quanto segue per facilitare il processo di migrazione delle applicazioni. È necessario identificare:
| Sviluppatore di app |
Converti le connessioni dall'applicazione Perl e dal modulo DBI per supportare PostgreSQL. | Le applicazioni basate su Perl utilizzano generalmente il modulo Perl DBI, che è un modulo di accesso al database standard per il linguaggio di programmazione Perl. È possibile utilizzare lo stesso modulo DBI con driver diversi per SQL Server e PostgreSQL. Per ulteriori informazioni sui moduli Perl richiesti, sulle installazioni e altre istruzioni, consultate la documentazione di DBD: :Pg.
| Sviluppatore di app |
Cambia le query SQL in linea in PostgreSQL. | L'applicazione potrebbe avere query SQL in linea con In SQL Server:
Per PostgreSQL, converti in:
| Sviluppatore di app |
Gestisci query SQL dinamiche e variabili Perl. | Le query SQL dinamiche sono istruzioni SQL create in fase di esecuzione dell'applicazione. Queste query vengono create dinamicamente durante l'esecuzione dell'applicazione, a seconda di determinate condizioni, in modo che il testo completo della query non sia noto fino all'esecuzione. Un esempio è un'applicazione di analisi finanziaria che analizza quotidianamente le prime 10 azioni e queste azioni cambiano ogni giorno. Le tabelle SQL vengono create in base alle migliori prestazioni e i valori sono noti solo in fase di esecuzione. Supponiamo che le query SQL in linea per questo esempio vengano passate a una funzione wrapper per ottenere i risultati impostati in una variabile e che quindi una variabile utilizzi una condizione per determinare se la tabella esiste:
Ecco un esempio di gestione delle variabili, seguito dalle query SQL Server e PostgreSQL per questo caso d'uso.
SQL Server:
PostgreSQL:
L'esempio seguente utilizza una variabile Perl in SQL in linea, che esegue un' SQL Server:
PostgreSQL:
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Converti costrutti SQL Server aggiuntivi in PostgreSQL. | Le seguenti modifiche si applicano a tutte le applicazioni, indipendentemente dal linguaggio di programmazione.
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Sfrutta i servizi AWS per migliorare le prestazioni. | Quando esegui la migrazione al cloud AWS, puoi perfezionare la progettazione di applicazioni e database per sfruttare i servizi AWS. Ad esempio, se le query della tua applicazione Python, connessa a un server di database Aurora compatibile con PostgreSQL, richiedono più tempo rispetto alle query originali di Microsoft SQL Server, potresti prendere in considerazione la creazione di un feed di dati storici direttamente in un bucket Amazon Simple Storage Service (Amazon S3) dal server Aurora e utilizzare Amazon Athena Query SQL per generare report e query di dati analitici per i dashboard degli utenti. | Sviluppatore di app, architetto cloud |
Risorse correlate
Informazioni aggiuntive
Sia Microsoft SQL Server che Aurora PostgreSQL sono compatibili con ANSI SQL. Tuttavia, dovresti comunque essere consapevole di eventuali incompatibilità nella sintassi, nei tipi di dati delle colonne, nelle funzioni native specifiche del database, negli inserimenti in blocco e nella distinzione tra maiuscole e minuscole quando migri la tua applicazione Python o Perl da SQL Server a PostgreSQL.
Le sezioni seguenti forniscono ulteriori informazioni sulle possibili incongruenze.
Confronto dei tipi di dati
Le modifiche ai tipi di dati da SQL Server a PostgreSQL possono portare a differenze significative nei dati risultanti su cui operano le applicazioni. Per un confronto dei tipi di dati, consulta la tabella sul sito Web Sqlines.
Funzioni SQL native o integrate
Il comportamento di alcune funzioni è diverso tra i database SQL Server e PostgreSQL. La tabella seguente fornisce un confronto.
Microsoft SQL Server | Descrizione | PostgreSQL |
---|---|---|
| Converte un valore da un tipo di dati a un altro. | PostgreSQL |
| Restituisce la data e l'ora correnti del sistema di database, in un formato. |
|
| Aggiunge un intervallo di data/ora a una data. |
|
| Converte un valore in un formato di dati specifico. |
|
| Restituisce la differenza tra due date. |
|
| Limita il numero di righe in un set di |
|
Blocchi anonimi
Una query SQL strutturata è organizzata in sezioni quali dichiarazione, eseguibili e gestione delle eccezioni. La tabella seguente confronta le versioni Microsoft SQL Server e PostgreSQL di un semplice blocco anonimo. Per blocchi anonimi complessi, si consiglia di richiamare una funzione di database personalizzata all'interno dell'applicazione.
Microsoft SQL Server | PostgreSQL |
---|---|
|
|
Altre differenze
Inserimenti di righe in blocco: l'equivalente PostgreSQL dell'utilità bcp di Microsoft
SQL Server è COPY. Sensibilità tra maiuscole e minuscole: i nomi delle colonne fanno distinzione tra maiuscole e minuscole in PostgreSQL, quindi è necessario convertire i nomi delle colonne di SQL Server in lettere minuscole o maiuscole. Questo diventa un fattore quando si estraggono o si confrontano i dati o si inseriscono i nomi delle colonne in set di risultati o variabili. L'esempio seguente identifica le colonne in cui i valori possono essere memorizzati in lettere maiuscole o minuscole.
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'";
Concatenazione: SQL Server utilizza
+
come operatore per la concatenazione di stringhe, mentre PostgreSQL utilizza.||
Convalida: è necessario testare e convalidare le query e le funzioni SQL in linea prima di utilizzarle nel codice dell'applicazione per PostgreSQL.
Inclusione della libreria ORM: puoi anche cercare di includere o sostituire la libreria di connessione al database esistente con librerie ORM Python come SQLAlchemy
Python e PynomODB. Ciò contribuirà a interrogare e manipolare facilmente i dati da un database utilizzando un paradigma orientato agli oggetti.