Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Ändern Sie Python- und Perl-Anwendungen, um die Datenbankmigration von Microsoft SQL Server zu Amazon Aurora Postgre SQL -Compatible Edition zu unterstützen
Erstellt von Dwarika Patra () und Deepesh Jayaprakash () AWS AWS
Umgebung: PoC oder Pilotprojekt | Quelle: Server SQL | Ziel: Aurora Postgre-Compatible SQL |
R-Typ: Replatform | Arbeitslast: Microsoft; Open Source | Technologien: Migration; Datenbanken |
AWSdienstleistungen: Amazon Aurora |
Übersicht
Dieses Muster beschreibt Änderungen an Anwendungs-Repositorys, die möglicherweise erforderlich sind, wenn Sie Datenbanken von Microsoft SQL Server zu Amazon Aurora SQL Postgre-Compatible Edition migrieren. Das Muster geht davon aus, dass diese Anwendungen auf Python oder Perl basieren, und enthält separate Anweisungen für diese Skriptsprachen.
Die Migration von SQL Serverdatenbanken zu Aurora SQL Postgre-Compatible umfasst die Schemakonvertierung, die Konvertierung von Datenbankobjekten, die Datenmigration und das Laden von Daten. Aufgrund der Unterschiede zwischen Postgre SQL und SQL Server (in Bezug auf Datentypen, Verbindungsobjekte, Syntax und Logik) besteht die schwierigste Migrationsaufgabe darin, die erforderlichen Änderungen an der Codebasis vorzunehmen, damit sie mit Postgre ordnungsgemäß funktioniert. SQL
Bei einer Python-basierten Anwendung sind Verbindungsobjekte und Klassen im gesamten System verstreut. Außerdem verwendet die Python-Codebasis möglicherweise mehrere Bibliotheken, um eine Verbindung zur Datenbank herzustellen. Wenn sich die Datenbankverbindungsschnittstelle ändert, müssen auch die Objekte, die die Inline-Abfragen der Anwendung ausführen, geändert werden.
Bei einer Perl-basierten Anwendung betreffen die Änderungen Verbindungsobjekte, Datenbankverbindungstreiber, statische und dynamische SQL Inline-Anweisungen und die Art und Weise, wie die Anwendung komplexe dynamische DML Abfragen und Ergebnismengen verarbeitet.
Wenn Sie Ihre Anwendung migrieren, können Sie auch mögliche Verbesserungen in Betracht ziehenAWS, z. B. den Ersatz des FTP Servers durch Amazon Simple Storage Service (Amazon S3) -Zugriff.
Der Prozess der Anwendungsmigration beinhaltet die folgenden Herausforderungen:
Verbindungsobjekte. Wenn Verbindungsobjekte im Code mit mehreren Bibliotheken und Funktionsaufrufen verstreut sind, müssen Sie möglicherweise einen generellen Weg finden, sie so zu ändern, dass sie SQL Postgre unterstützen.
Fehler- oder Ausnahmebehandlung beim Abrufen oder bei Aktualisierungen von Datensätzen. Wenn Sie bedingte Erstellungs-, Lese-, Aktualisierungs- und Löschvorgänge (CRUD) in der Datenbank ausführen, die Variablen, Ergebnissätze oder Datenrahmen zurückgeben, können Fehler oder Ausnahmen zu Anwendungsfehlern mit kaskadierenden Effekten führen. Diese sollten sorgfältig behandelt und mit geeigneten Validierungen und Speicherpunkten versehen werden. Ein solcher Speicherpunkt ist das Aufrufen großer SQL Inline-Abfragen oder Datenbankobjekte innerhalb
BEGIN...EXCEPTION...END
von Blöcken.Kontrolle von Transaktionen und deren Validierung. Dazu gehören manuelle und automatische Commits und Rollbacks. Der SQL Postgre-Treiber für Perl verlangt, dass Sie das Auto-Commit-Attribut immer explizit setzen.
Umgang mit dynamischen Abfragen. SQL Dies erfordert ein fundiertes Verständnis der Abfragelogik und iterative Tests, um sicherzustellen, dass Abfragen wie erwartet funktionieren.
Leistung. Sie sollten sicherstellen, dass Codeänderungen nicht zu einer Verschlechterung der Anwendungsleistung führen.
Dieses Muster erklärt den Konvertierungsprozess im Detail.
Voraussetzungen und Einschränkungen
Voraussetzungen
Grundkenntnisse der Python- und Perl-Syntax.
Grundkenntnisse in SQL Server und SQL Postgre.
Verständnis Ihrer bestehenden Anwendungsarchitektur.
Zugriff auf Ihren Anwendungscode, Ihre SQL Serverdatenbank und Ihre SQL Postgre-Datenbank.
Zugriff auf die Windows- oder Linux-Entwicklungsumgebung (oder eine andere Unix-) Entwicklungsumgebung mit Anmeldeinformationen zum Entwickeln, Testen und Validieren von Anwendungsänderungen.
Für eine Python-basierte Anwendung Standard-Python-Bibliotheken, die Ihre Anwendung möglicherweise benötigt, wie Pandas zur Verarbeitung von Datenframes und psycopg2 oder für Datenbankverbindungen. SQLAlchemy
Für eine Perl-basierte Anwendung sind Perl-Pakete mit abhängigen Bibliotheken oder Modulen erforderlich. Das Modul Comprehensive Perl Archive Network (CPAN) kann die meisten Anwendungsanforderungen unterstützen.
Alle erforderlichen abhängigen benutzerdefinierten Bibliotheken oder Module.
Datenbankanmeldedaten für den Lesezugriff auf den SQL Server und Lese-/Schreibzugriff auf Aurora.
PostgreSQL, um Anwendungsänderungen mit Diensten und Benutzern zu validieren und zu debuggen.
Zugriff auf Entwicklungstools während der Anwendungsmigration wie Visual Studio Code, Sublime Text oder. pgAdmin
Einschränkungen
Einige Python- oder Perl-Versionen, Module, Bibliotheken und Pakete sind nicht mit der Cloud-Umgebung kompatibel.
Einige Bibliotheken und Frameworks von Drittanbietern, die für SQL Server verwendet werden, können nicht ersetzt werden, um die Postgre-Migration zu unterstützen. SQL
Leistungsschwankungen können Änderungen an Ihrer Anwendung, an Inline-Transact- SQL (T-SQL) Abfragen, Datenbankfunktionen und gespeicherten Prozeduren erforderlich machen.
Postgre SQL unterstützt Kleinbuchstaben für Tabellennamen, Spaltennamen und andere Datenbankobjekte.
Einige Datentypen, wie z. B. UUID Spalten, werden nur in Kleinbuchstaben gespeichert. Python- und Perl-Anwendungen müssen mit solchen Fallunterschieden umgehen.
Unterschiede in der Zeichenkodierung müssen mit dem richtigen Datentyp für die entsprechenden Textspalten in der Postgre-Datenbank behandelt werden. SQL
Produktversionen
Python 3.6 oder höher (verwenden Sie die Version, die Ihr Betriebssystem unterstützt)
Perl 5.8.3 oder höher (verwenden Sie die Version, die Ihr Betriebssystem unterstützt)
Aurora SQL Postgre-Compatible Edition 4.2 oder höher (siehe Details)
Architektur
Quelltechnologie-Stack
Skriptsprache (Anwendungsprogrammiersprache): Python 2.7 oder höher oder Perl 5.8
Datenbank: Microsoft SQL Server Version 13
Betriebssystem: Red Hat Enterprise Linux (7RHEL)
Zieltechnologie-Stack
Skriptsprache (Anwendungsprogrammiersprache): Python 3.6 oder höher oder Perl 5.8 oder höher
Datenbank: Aurora SQL Postgre-Compatible 4.2
Betriebssystem: 7 RHEL
Migrationsarchitektur
Tools
AWSDienste und Tools
Aurora Postgre SQL —Compatible Edition ist eine vollständig verwaltete, SQL Postgre-kompatible und ACID -konforme relationale Datenbank-Engine, die die Geschwindigkeit und Zuverlässigkeit kommerzieller High-End-Datenbanken mit der Wirtschaftlichkeit von Open-Source-Datenbanken kombiniert. Aurora Postgre SQL ist ein direkter Ersatz für Postgre SQL und macht es einfacher und kostengünstiger, Ihre neuen und bestehenden Postgre-Bereitstellungen einzurichten, zu betreiben und zu skalieren. SQL
AWSCommand Line Interface (AWSCLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können.
Andere Tools
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Folgen Sie diesen Schritten zur Codekonvertierung, um Ihre Anwendung auf Postgre SQL zu migrieren. |
Die folgenden Epics enthalten detaillierte Anweisungen für einige dieser Konvertierungsaufgaben für Python- und Perl-Anwendungen. | App-Developer |
Verwenden Sie für jeden Schritt der Migration eine Checkliste. | Fügen Sie Ihrer Checkliste für jeden Schritt der Anwendungsmigration, einschließlich des letzten Schritts, Folgendes hinzu:
| App-Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Analysieren Sie Ihre bestehende Python-Codebasis. | Ihre Analyse sollte Folgendes beinhalten, um den Migrationsprozess der Anwendung zu erleichtern:
| App-Developer |
Konvertieren Sie Ihre Datenbankverbindungen zur Unterstützung von Postgre. SQL | Die meisten Python-Anwendungen verwenden die pyodbc-Bibliothek, um wie folgt eine Verbindung mit SQL Serverdatenbanken herzustellen.
Konvertieren Sie die Datenbankverbindung wie folgt zur Unterstützung von SQL Postgre.
| App-Developer |
Ändern Sie SQL Inline-Abfragen in SQL Postgre. | Konvertieren Sie Ihre SQL Inline-Abfragen in ein SQL Postgre-kompatibles Format. Die folgende SQL Serverabfrage ruft beispielsweise eine Zeichenfolge aus einer Tabelle ab.
Nach der Konvertierung sieht die Postgre SQL -kompatible SQL Inline-Abfrage wie folgt aus.
| App-Developer |
Verarbeiten Sie dynamische AbfragenSQL. | Dynamic SQL kann in einem Skript oder in mehreren Python-Skripten vorhanden sein. Frühere Beispiele zeigten, wie die Zeichenkettenersetzungsfunktion von Python verwendet werden kann, um Variablen für die Erstellung dynamischer SQL Abfragen einzufügen. Ein alternativer Ansatz besteht darin, die Abfragezeichenfolge gegebenenfalls mit Variablen anzuhängen. Im folgenden Beispiel wird die Abfragezeichenfolge spontan auf der Grundlage der von einer Funktion zurückgegebenen Werte erstellt.
Diese Arten von dynamischen Abfragen sind bei der Anwendungsmigration sehr verbreitet. Gehen Sie wie folgt vor, um dynamische Abfragen zu verarbeiten:
| App-Developer |
Behandelt Ergebnismengen, Variablen und Datenrahmen. | Für Microsoft SQL Server verwenden Sie Python-Methoden wie pyodbc (Microsoft Server) SQL
Um in Aurora ähnliche Aufgaben wie das Herstellen einer Verbindung zu Postgre SQL und das Abrufen von Ergebnismengen auszuführen, können Sie entweder psycopg2 oder verwenden. SQLAlchemy Diese Python-Bibliotheken stellen das Verbindungsmodul und das Cursorobjekt bereit, um die SQL Postgre-Datenbankeinträge zu durchsuchen, wie im folgenden Beispiel gezeigt. psycopg2 (Aurora SQL Postgre-kompatibel)
SQLAlchemy(Aurora SQL Postgre-kompatibel)
| App-Developer |
Testen Sie Ihre Anwendung während und nach der Migration. | Das Testen der migrierten Python-Anwendung ist ein fortlaufender Prozess. Da die Migration Änderungen an Verbindungsobjekten (psycopg2 oder SQLAlchemy), Fehlerbehandlung, neue Funktionen (Datenrahmen), SQL Inline-Änderungen, Funktionen zum Massenkopieren (
| App-Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Analysieren Sie Ihre bestehende Perl-Codebasis. | Ihre Analyse sollte Folgendes beinhalten, um den Anwendungsmigrationsprozess zu erleichtern. Sie sollten Folgendes identifizieren:
| App-Developer |
Konvertiert die Verbindungen der Perl-Anwendung und des DBI Perl-Moduls zur Unterstützung von Postgre. SQL | Perl-basierte Anwendungen verwenden im Allgemeinen das DBI Perl-Modul, ein Standardmodul für den Datenbankzugriff in der Programmiersprache Perl. Sie können dasselbe DBI Modul mit unterschiedlichen Treibern für SQL Server und Postgre verwenden. SQL Weitere Informationen zu den erforderlichen Perl-Modulen, Installationen und anderen Anweisungen finden Sie in der DBD: :Pg-Dokumentation
| App-Developer |
Ändern Sie SQL Inline-Abfragen in Postgre. SQL | Ihre Anwendung enthält möglicherweise SQL Inline-Abfragen mit Auf SQL dem Server:
Für Postgre SQL konvertieren Sie in:
| App-Developer |
Verarbeitet dynamische SQL Abfragen und Perl-Variablen. | Dynamische SQL Abfragen sind SQL Anweisungen, die zur Laufzeit der Anwendung erstellt werden. Diese Abfragen werden je nach bestimmten Bedingungen dynamisch erstellt, wenn die Anwendung ausgeführt wird, sodass der vollständige Text der Abfrage erst zur Laufzeit bekannt ist. Ein Beispiel ist eine Finanzanalyseanwendung, die täglich die zehn wichtigsten Aktien analysiert, und diese Aktien ändern sich täglich. Die SQL Tabellen werden auf der Grundlage der Leistungsträger erstellt, und die Werte sind erst zur Laufzeit bekannt. Nehmen wir an, dass die SQL Inline-Abfragen für dieses Beispiel an eine Wrapper-Funktion übergeben werden, um die Ergebnisse in einer Variablen zu erhalten, und dann verwendet eine Variable eine Bedingung, um zu bestimmen, ob die Tabelle existiert:
Hier ist ein Beispiel für die Variablenbehandlung, gefolgt von den SQL Server- und SQL Postgre-Abfragen für diesen Anwendungsfall.
SQLServer:
Postfach: SQL
Das folgende Beispiel verwendet eine Inline-Perl-VariableSQL, die eine SQLServer:
Postfach: SQL
| App-Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Konvertiert zusätzliche SQL Serverkonstrukte nach SQL Postgre. | Die folgenden Änderungen gelten für alle Anwendungen, unabhängig von der Programmiersprache.
| App-Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Nutzen Sie AWS Dienste, um die Leistung zu verbessern. | Wenn Sie in die AWS Cloud migrieren, können Sie Ihr Anwendungs- und Datenbankdesign verfeinern, um die Vorteile der AWS Dienste zu nutzen. Wenn beispielsweise die Abfragen Ihrer Python-Anwendung, die mit einem Aurora SQL Postgre-kompatiblen Datenbankserver verbunden ist, mehr Zeit in Anspruch nehmen als Ihre ursprünglichen Microsoft SQL Server-Abfragen, könnten Sie erwägen, einen Feed mit historischen Daten direkt vom Aurora-Server in einen Amazon Simple Storage Service (Amazon S3) -Bucket zu erstellen und Amazon Athena-basierte SQL Abfragen zu verwenden, um Berichte und analytische Datenabfragen für Ihre Benutzer-Dashboards zu generieren. | App-Entwickler, Cloud-Architekt |
Zugehörige Ressourcen
Zusätzliche Informationen
Sowohl Microsoft SQL Server als auch Aurora SQL Postgre-Compatible sind ANSI SQL -konform. Sie sollten sich jedoch dennoch aller Inkompatibilitäten in Bezug auf Syntax, Spaltendatentypen, native datenbankspezifische Funktionen, Masseneinfügungen und Berücksichtigung der Groß- und Kleinschreibung bewusst sein, wenn Sie Ihre Python- oder Perl-Anwendung von Server zu Postgre migrieren. SQL SQL
In den folgenden Abschnitten finden Sie weitere Informationen zu möglichen Inkonsistenzen.
Vergleich der Datentypen
Änderungen des Datentyps von SQL Server zu Postgre SQL können zu erheblichen Unterschieden bei den resultierenden Daten führen, mit denen Anwendungen arbeiten. Einen Vergleich der Datentypen finden Sie in der Tabelle auf der Sqlines-Website
Systemeigene oder integrierte Funktionen SQL
Das Verhalten einiger Funktionen unterscheidet sich zwischen SQL Server- und SQL Postgre-Datenbanken. Die folgende Tabelle bietet einen Vergleich.
SQLMicrosoft-Server | Beschreibung | Postgret SQL |
---|---|---|
| Konvertiert einen Wert von einem Datentyp in einen anderen. | Postger SQL |
| Gibt Datum und Uhrzeit des aktuellen Datenbanksystems in einem |
|
| Fügt einem Datum ein Zeit-/Datumsintervall hinzu. |
|
| Konvertiert einen Wert in ein bestimmtes Datenformat. |
|
| Gibt die Differenz zwischen zwei Daten zurück. |
|
| Beschränkt die Anzahl der Zeilen in einem |
|
Anonyme Blöcke
Eine strukturierte SQL Abfrage ist in Abschnitte wie Deklaration, ausführbare Dateien und Ausnahmebehandlung unterteilt. In der folgenden Tabelle werden die Microsoft SQL Server- und SQL Postgre-Versionen eines einfachen anonymen Blocks verglichen. Für komplexe anonyme Blöcke empfehlen wir, dass Sie eine benutzerdefinierte Datenbankfunktion in Ihrer Anwendung aufrufen.
SQLMicrosoft-Server | Postgret SQL |
---|---|
|
|
Andere Unterschiede
Masseneinfügungen von Zeilen: Das SQL Postgre-Äquivalent des Microsoft SQL Server-Dienstprogramms bcp
ist. COPY Berücksichtigung von Groß- und Kleinschreibung: Bei Spaltennamen wird in Postgre zwischen Groß- und Kleinschreibung unterschiedenSQL, sodass Sie Ihre SQL Server-Spaltennamen in Klein- oder Großbuchstaben umwandeln müssen. Dies wird zu einem Faktor, wenn Sie Daten extrahieren oder vergleichen oder Spaltennamen in Ergebnismengen oder Variablen platzieren. Das folgende Beispiel identifiziert Spalten, in denen Werte in Groß- oder Kleinbuchstaben gespeichert werden könnten.
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'";
Verkettung: SQL Server verwendet
+
als Operator für die Verkettung von Zeichenketten, Postgre dagegen. SQL||
Validierung: Sie sollten SQL Inline-Abfragen und -Funktionen testen und validieren, bevor Sie sie im Anwendungscode für Postgre verwenden. SQL
ORMInklusion von Bibliotheken: Sie können auch versuchen, eine bestehende Datenbankverbindungsbibliothek durch Python-Bibliotheken wie ORM Python-Bibliotheken wie SQLAlchemy
PynomoDB einzubeziehen oder zu ersetzen. Dies wird dazu beitragen, Daten aus einer Datenbank mithilfe eines objektorientierten Paradigmas einfach abzufragen und zu bearbeiten.