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.
Migration von Server zu Postgre mit SQL SQL AWS Schema Conversion Tool
Sie können das SQL Erweiterungspaket SQL Server to Postgre verwenden. AWS SCT Dieses Erweiterungspaket emuliert SQL Server-Datenbankfunktionen im konvertierten SQL Postgre-Code. Verwenden Sie das SQL SQL Server-to-Postgre-Erweiterungspaket, um SQL Server-Agent und SQL Server-Datenbank-Mail zu emulieren. Weitere Informationen zu Erweiterungspaketen finden Sie unter Verwenden von Erweiterungspaketen mit AWS Schema Conversion Tool.
Themen
- Rechte für Postgre SQL als Zieldatenbank
- SQLEinstellungen für die Konvertierung von Server zu Postgree SQL
- SQLServerpartitionen in Postgre-Partitionen der SQL Version 10 konvertieren
- Überlegungen zur Migration
- Verwendung eines AWS SCT Erweiterungspakets zur Emulation des SQL Server-Agents in Postgre SQL
- Verwenden Sie ein AWS SCT Erweiterungspaket, um SQL Server-Datenbank-Mail in Postgre zu emulieren SQL
Rechte für Postgre SQL als Zieldatenbank
Um Postgre SQL als Ziel zu verwenden, ist die CREATE ON DATABASE
entsprechende AWS SCT Berechtigung erforderlich. Stellen Sie sicher, dass Sie dieses Recht für jede Postgre-Zieldatenbank gewähren. SQL
Um die konvertierten öffentlichen Synonyme zu verwenden, ändern Sie den Standardsuchpfad der Datenbank in"$user", public_synonyms, public
.
Sie können das folgende Codebeispiel verwenden, um einen Datenbankbenutzer zu erstellen und die Berechtigungen zu gewähren.
CREATE ROLE
user_name
LOGIN PASSWORD 'your_password
'; GRANT CREATE ON DATABASEdb_name
TOuser_name
; ALTER DATABASEdb_name
SET SEARCH_PATH = "$user", public_synonyms, public;
Ersetzen Sie im vorherigen Beispiel user_name
durch den Namen Ihres Benutzers. Dann ersetze db_name
mit dem Namen Ihrer Zieldatenbank. Schließlich ersetzen your_password
mit einem sicheren Passwort.
In Postgre SQL superuser
kann nur der Besitzer des Schemas ein Schema löschen. Der Besitzer kann ein Schema und alle Objekte, die dieses Schema enthält, löschen, auch wenn der Eigentümer des Schemas einige seiner Objekte nicht besitzt.
Wenn Sie verschiedene Benutzer verwenden, um verschiedene Schemas zu konvertieren und auf Ihre Zieldatenbank anzuwenden, erhalten Sie möglicherweise eine Fehlermeldung, wenn ein Schema nicht gelöscht AWS SCT werden kann. Verwenden Sie die Rolle superuser
, um diese Fehlermeldung zu vermeiden.
SQLEinstellungen für die Konvertierung von Server zu Postgree SQL
Um die Einstellungen für die SQL Konvertierung von SQL Server zu Postgre zu bearbeiten, wählen Sie Einstellungen und dann Konvertierungseinstellungen aus. Wählen Sie in der oberen Liste SQLServer und dann SQLServer — SQL Postgre aus. AWS SCT zeigt alle verfügbaren Einstellungen für die Konvertierung von SQL Server zu Postgre SQL an.
SQLDie Einstellungen für die SQL Konvertierung von Server zu Postgre AWS SCT umfassen Optionen für Folgendes:
-
Um die Anzahl der Kommentare mit Aktionselementen im konvertierten Code zu begrenzen.
Wählen Sie für Hinzufügen von Kommentaren zum konvertierten Code für Aktionselemente mit ausgewähltem Schweregrad und höherem Schweregrad den Schweregrad der Aktionspunkte aus. AWS SCT fügt dem konvertierten Code Kommentare für Aktionspunkte mit dem ausgewählten Schweregrad und höher hinzu.
Beispiel: Um die Anzahl der Kommentare im konvertierten Code zu minimieren, wählen Sie Nur Fehler aus. Um Kommentare zu allen Aktionselementen in den konvertierten Code aufzunehmen, wählen Sie Alle Nachrichten aus.
-
Um die Verwendung von Indizes mit demselben Namen in verschiedenen Tabellen im SQL Server zu ermöglichen.
In Postgre SQL müssen alle Indexnamen, die Sie im Schema verwenden, eindeutig sein. Um sicherzustellen, dass eindeutige Namen für alle Ihre Indizes AWS SCT generiert werden, wählen Sie Eindeutige Namen für Indizes generieren aus.
-
Um SQL Serverprozeduren in SQL Postgre-Funktionen zu konvertieren.
SQLPostgre-Version 10 und früher unterstützt keine Prozeduren. Kunden, die mit der Verwendung von Prozeduren in Postgre nicht vertraut sindSQL, AWS SCT können Prozeduren in Funktionen konvertieren. Wählen Sie dazu Verfahren in Funktionen konvertieren aus.
-
Um die Ausgabe von
EXEC
in einer Tabelle zu emulieren.Ihre SQL Quellserverdatenbank kann die Ausgabe von
EXEC
in einer Tabelle speichern. AWS SCT erstellt temporäre Tabellen und ein zusätzliches Verfahren, um diese Funktion zu emulieren. Um diese Emulation zu verwenden, wählen Sie Zusätzliche Routinen für den Umgang mit offenen Datensätzen erstellen aus. -
Um die Vorlage zu definieren, die für die Schemanamen im konvertierten Code verwendet werden soll. Wählen Sie für die Vorlage zur Generierung von Schemanamen eine der folgenden Optionen aus:
<source_db>— Verwendet den SQL Serverdatenbanknamen als Schemanamen in PostgreSQL.
<source_schema>— Verwendet den SQL Serverschemanamen als Schemanamen in SQL Postgre.
_ <source_db><schema>— Verwendet eine Kombination aus SQL Serverdatenbank und Schemanamen als Schemanamen in SQL Postgre.
-
Um die Groß- und Kleinschreibung Ihrer Quellobjektnamen beizubehalten.
Um zu verhindern, dass Objektnamen in Kleinbuchstaben umgewandelt werden, wählen Sie bei Operationen, bei denen Groß- und Kleinschreibung beachtet wird, die Option Kleinschreibung vermeiden aus. Diese Option gilt nur, wenn Sie die Option zur Berücksichtigung von Groß- und Kleinschreibung in Ihrer Zieldatenbank aktivieren.
-
Um die Parameternamen aus Ihrer Quelldatenbank beizubehalten.
Um den Namen der Parameter im konvertierten Code doppelte Anführungszeichen hinzuzufügen, wählen Sie Ursprüngliche Parameternamen beibehalten.
SQLServerpartitionen in Postgre-Partitionen der SQL Version 10 konvertieren
Beachten Sie Folgendes, wenn Sie eine Microsoft SQL Server-Datenbank in Amazon Aurora Postgre SQL -Compatible Edition (Aurora PostgreSQL) oder Amazon Relational Database Service for Postgre SQL (Amazon RDS for PostgreSQL) konvertieren.
In SQL Server erstellen Sie Partitionen mit Partitionsfunktionen. Beachten Sie bei der Konvertierung von einer portionierten SQL Server-Tabelle in eine partitionierte Tabelle nach SQL Postgre-Version 10 mehrere mögliche Probleme:
-
SQLServer ermöglicht es Ihnen, eine Tabelle mithilfe einer Spalte ohne Einschränkung zu partitionieren. NOT NULL In diesem Fall werden alle NULL Werte in die Partition ganz links verschoben. Postgre unterstützt SQL keine NULL Werte für die Partitionierung. RANGE
-
SQLServer ermöglicht es Ihnen, primäre und eindeutige Schlüssel für partitionierte Tabellen zu erstellen. Für Postgre SQL erstellen Sie direkt primäre oder eindeutige Schlüssel für jede Partition. Daher müssen PRIMARY Or UNIQUE KEY Constraints bei der Migration zu Postgre aus der übergeordneten Tabelle entfernt werden. SQL Die resultierenden Schlüsselnamen haben das folgende Format.
<original_key_name>_<partition_number>
-
SQLServer ermöglicht es Ihnen, eine Fremdschlüsseleinschränkung von und zu partitionierten Tabellen zu erstellen. Postgre unterstützt SQL keine Fremdschlüssel, die auf partitionierte Tabellen verweisen. Außerdem unterstützt Postgre SQL keine Fremdschlüsselverweise von einer partitionierten Tabelle auf eine andere Tabelle.
-
SQLServer ermöglicht es Ihnen, Indizes für partitionierte Tabellen zu erstellen. Für Postgre SQL sollte für jede Partition direkt ein Index erstellt werden. Daher müssen Indizes bei der Migration zu Postgre aus ihren übergeordneten Tabellen entfernt werden. SQL Die sich ergebenden Indexnamen weisen das Format
<original_index_name>_<partition_number>
auf. Postgre unterstützt SQL keine partitionierten Indizes.
Überlegungen zur Migration
Einige Dinge, die Sie bei der Migration eines SQL Serverschemas zu Postgre beachten sollten: SQL
-
In Postgre SQL müssen alle Objektnamen in einem Schema eindeutig sein, einschließlich Indizes. Indexnamen müssen im Schema der Basistabelle eindeutig sein. In SQL Server kann ein Indexname für verschiedene Tabellen identisch sein.
Um die Eindeutigkeit von Indexnamen zu gewährleisten, AWS SCT haben Sie die Möglichkeit, eindeutige Indexnamen zu generieren, falls Ihre Indexnamen nicht eindeutig sind. Wählen Sie hierzu die Option Generate unique index names (Eindeutige Indexnamen generieren) in den Projekteigenschaften. Diese Funktion ist standardmäßig aktiviert. Wenn diese Option aktiviert ist, werden eindeutige Indexnamen im Format IX_table_name_index_name erstellt. Wenn diese Option deaktiviert ist, werden Indexnamen nicht geändert.
Eine GOTO Anweisung und ein Label können verwendet werden, um die Reihenfolge zu ändern, in der Anweisungen ausgeführt werden. Alle SQL Transact-Anweisungen, die auf eine GOTO Anweisung folgen, werden übersprungen und die Verarbeitung wird am Label fortgesetzt. GOTOAnweisungen und Labels können überall innerhalb einer Prozedur, eines Batches oder eines Anweisungsblocks verwendet werden. GOTOAnweisungen können auch verschachtelt werden.
Postgre verwendet SQL GOTO keine Anweisungen. Wenn Code AWS SCT konvertiert wird, der eine GOTO Anweisung enthält, wird die Anweisung so konvertiert, dass sie eineBEGIN... END oderLOOP... END LOOP -Anweisung verwendet. In der folgenden Tabelle finden Sie Beispiele dafür, wie GOTO Anweisungen AWS SCT konvertiert werden.
SQLGOTOServeranweisungen und die konvertierten Postgre-Anweisungen SQL SQLServeranweisung Postgre-Anweisung SQL BEGIN .... statement1; .... GOTO label1; statement2; .... label1: Statement3; .... END
BEGIN label1: BEGIN .... statement1; .... EXIT label1; statement2; .... END; Statement3; .... END
BEGIN .... statement1; .... label1: statement2; .... GOTO label1; statement3; .... statement4; .... END
BEGIN .... statement1; .... label1: LOOP statement2; .... CONTINUE label1; EXIT label1; END LOOP; statement3; .... statement4; .... END
BEGIN .... statement1; .... label1: statement2; .... statement3; .... statement4; .... END
BEGIN .... statement1; .... label1: BEGIN statement2; .... statement3; .... statement4; .... END; END
-
Postgre unterstützt SQL keine Aussage. MERGE AWS SCT emuliert das Verhalten einer MERGE Anweisung auf folgende Weise:
-
Von INSERT ON CONFLICT Construction.
-
Durch die Verwendung der UPDATE FROM DML Anweisung, z. B. MERGE ohne WHEN NOT MATCHED Klausel.
-
Durch die VerwendungCURSOR, z. B. MERGE mit einer DELETE With-Klausel oder durch die Verwendung einer komplexen MERGE ON-Bedingungsanweisung.
-
AWS SCT kann Datenbank-Trigger zum Objektbaum hinzufügen, wenn Amazon das Ziel RDS ist.
AWS SCT kann Trigger auf Serverebene zum Objektbaum hinzufügen, wenn Amazon das Ziel RDS ist.
SQLDer Server erstellt
deleted
und verwaltet automatischinserted
Tabellen. Sie können diese temporären, speicherresidenten Tabellen verwenden, um die Auswirkungen bestimmter Datenänderungen zu testen und Bedingungen für DML Triggeraktionen festzulegen. AWS SCT kann die Verwendung dieser Tabellen innerhalb von DML Triggeranweisungen konvertieren.AWS SCT kann verknüpfte Server zum Objektbaum hinzufügen, wenn Amazon das Ziel RDS ist.
Bei der Migration von Microsoft SQL Server zu Postgre SQL wird die integrierte SNAME Funktion SUSER _ wie folgt konvertiert:
SUSER_ SNAME — Gibt den Anmeldenamen zurück, der einer Sicherheitsidentifikationsnummer () SID zugeordnet ist.
SUSER_ SNAME (<server_user_sid>) — Nicht unterstützt.
SUSER_ SNAME () CURRENT _ USER — Gibt den Benutzernamen des aktuellen Ausführungskontextes zurück.
SUSER_ SNAME (NULL) — Gibt zurückNULL.
Die Umwandlung von Tabellenwertfunktionen wird unterstützt. Tabellenwertfunktionen geben eine Tabelle zurück und können in einer Abfrage die Stelle einer Tabelle einnehmen.
-
PATINDEXgibt die Startposition des ersten Vorkommens eines Musters in einem angegebenen Ausdruck für alle gültigen Text- und Zeichendatentypen zurück. Nullen werden zurückgegeben, wenn das Muster nicht gefunden wird. AWS SCT <pattern character><expression character varying>Ersetzt bei der Konvertierung von SQL Server zu Amazon RDS for Postgre den AnwendungscodeSQL, der verwendet wird, durch PATINDEX aws_sqlserver_ext.patindex (,).
-
In SQL Server ist ein benutzerdefinierter Tabellentyp ein Typ, der die Definition einer Tabellenstruktur darstellt. Sie verwenden einen benutzerdefinierten Tabellentyp, um table-value-Parameter für gespeicherte Prozeduren oder Funktionen zu deklarieren. Sie können einen benutzerdefinierten Tabellentyp auch verwenden, um Tabellenvariablen zu deklarieren, die Sie in einem Batch oder im Hauptteil einer gespeicherten Prozedur oder Funktion verwenden möchten. AWS SCT hat diesen Typ in Postgre emuliert, SQL indem eine temporäre Tabelle erstellt wurde.
AWS SCT Konvertiert bei der Konvertierung von SQL Server nach Postgre SQL SQL Serversystemobjekte in erkennbare Objekte in Postgre. SQL Die folgende Tabelle zeigt, wie die Systemobjekte umgewandelt werden.
Anwendungsfälle für MS SQL Server | Postgree-Substitution SQL |
---|---|
SYS.SCHEMAS |
AWS_SQLSERVER_EXT.SYS_SCHEMAS |
SYS.TABLES |
AWS_SQLSERVER_EXT.SYS_TABLES |
SYS.VIEWS |
AWS_SQLSERVER_EXT.SYS_VIEWS |
SYS.ALL_VIEWS |
AWS_SQLSERVER_EXT.SYS_ALL_VIEWS |
SYS.TYPES |
AWS_SQLSERVER_EXT.SYS_TYPES |
SYS.COLUMNS |
AWS_SQLSERVER_EXT.SYS_COLUMNS |
SYS.ALL_COLUMNS |
AWS_SQLSERVER_EXT.SYS_ALL_COLUMNS |
SYS.FOREIGN_KEYS |
AWS_SQLSERVER_EXT.SYS_FOREIGN_KEYS |
SYS.SYSFOREIGNKEYS |
AWS_SQLSERVER_EXT.SYS_SYSFOREIGNKEYS |
SYS.FOREIGN_KEY_COLUMNS |
AWS_SQLSERVER_EXT.SYS_FOREIGN_KEY_COLUMNS |
SYS.KEY_CONSTRAINTS |
AWS_SQLSERVER_EXT.SYS_KEY_CONSTRAINTS |
SYS.IDENTITY_COLUMNS |
AWS_SQLSERVER_EXT.SYS_IDENTITY_COLUMNS |
SYS.PROCEDURES |
AWS_SQLSERVER_EXT.SYS_PROCEDURES |
SYS.INDEXES |
AWS_SQLSERVER_EXT.SYS_INDEXES |
SYS.SYSINDEXES |
AWS_SQLSERVER_EXT.SYS_SYSINDEXES |
SYS.OBJECTS |
AWS_SQLSERVER_EXT.SYS_OBJECTS |
SYS.ALL_OBJECTS |
AWS_SQLSERVER_EXT.SYS_ALL_OBJECTS |
SYS.SYSOBJECTS |
AWS_SQLSERVER_EXT.SYS_SYSOBJECTS |
SYS.SQL_MODULES |
AWS_SQLSERVER_EXT.SYS_SQL_MODULES |
SYS.DATABASES |
AWS_SQLSERVER_EXT.SYS_DATABASES |
INFORMATION_SCHEMA.SCHEMATA |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_SCHEMATA |
INFORMATION_SCHEMA.VIEWS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_VIEWS |
INFORMATION_SCHEMA.TABLES |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLES |
INFORMATION_SCHEMA.COLUMNS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_COLUMNS |
INFORMATION_SCHEMA.CHECK_CONSTRAINTS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CHECK_CONSTRAINTS |
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_REFERENTIAL_CONSTRAINTS |
INFORMATION_SCHEMA.TABLE_CONSTRAINTS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLE_CONSTRAINTS |
INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_KEY_COLUMN_USAGE |
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_TABLE_USAGE |
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_COLUMN_USAGE |
INFORMATION_SCHEMA.ROUTINES |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_ROUTINES |
SYS.SYSPROCESSES |
AWS_SQLSERVER_EXT.SYS_SYSPROCESSES |
sys.system_objects |
AWS_SQLSERVER_EXT.SYS_SYSTEM_OBJECTS |