Auf dieser Seite wird erläutert, wie Sie Oracle-Tabellen ohne Primärschlüssel migrieren.
Unter Automatische Primärschlüsselgenerierung wird erläutert, wie Database Migration Service mit Quelltabellen ohne Primärschlüssel umgeht.
Unter Fehlende Primärschlüssel manuell hinzufügen finden Sie Beispielabfragen, mit denen Sie fehlende Primärschlüssel in Ihrem konvertierten Schema hinzufügen können.
Automatische Primärschlüsselgenerierung – Übersicht
Bei Tabellen ohne Primärschlüssel ist keine konsistente Replikation gewährleistet. Database Migration Service migriert nur Tabellen mit Primärschlüsseln. Wenn Ihre Quelldatenbank Tabellen ohne Primärschlüssel enthält, kann Database Migration Service diese auf folgende Weise verarbeiten:
- Wenn Sie
Quellcode und Schema konvertieren, kann Database Migration Service automatisch fehlende Primärschlüssel erstellen, indem
ROWID-Spalten in den Zieltabellen hinzugefügt werden. Für diesen automatisierten Prozess müssen Ihre Quelltabellen:- Sie haben noch keine Primärschlüssel.
- Verwenden Sie keine
UNIQUE-Einschränkung ohne Spalten, die Nullwerte enthalten können. - Verwenden Sie keinen
UNIQUE-Index ohne Spalten, die Nullwerte enthalten können.
- In Legacy-Konvertierungsarbeitsbereichen erstellt Database Migration Service nicht automatisch Primärschlüssel. Wenn Sie einen Legacy-Konvertierungsarbeitsbereich verwenden, müssen Sie den Tabellen im konvertierten PostgreSQL-Schema manuell fehlende Primärschlüssel hinzufügen.
Fehlende Primärschlüssel manuell hinzufügen
So migrieren Sie Oracle-Tabellen ohne Primärschlüssel:
- Verwenden Sie einen Konvertierungsarbeitsbereich, um Ihren Quellcode und Ihr Schema zu konvertieren.
- Informationen zu Standard-Konvertierungsarbeitsbereichen finden Sie unter Quellcode und Schema konvertieren.
- Informationen zu Legacy-Konvertierungsarbeitsbereichen finden Sie unter Mit Legacy-Konvertierungsarbeitsbereichen arbeiten.
- Stellen Sie mit einem SQL-Client eine Verbindung zur Cloud SQL-Zielinstanz her. Sie können die folgenden Methoden verwenden:
-
psql-Client. Mit dieser Methode können Sie eine Verbindung zur privaten IP-Adresse Ihrer Instanz herstellen. Möglicherweise müssen Sie dazu jedoch eine virtuelle Compute Engine-Maschine erstellen. -
gcloud sql connect-Befehl. Dieser Befehl funktioniert nur für Cloud SQL-Instanzen, für die eine öffentliche IP-Adresse aktiviert ist.
-
- Erstellen Sie die fehlenden Primärschlüsseleinschränkungen für Ihre Tabellen. Weitere Informationen zu Primärschlüsseln finden Sie in der PostgreSQL-Dokumentation unter
Primärschlüssel.
Sie können auch die folgenden Abschnitte maximieren, um SQL-Beispielbefehle aufzurufen:
Primärschlüssel mit vorhandenen Spalten erstellen
Ihre Tabelle hat möglicherweise bereits einen logischen Primärschlüssel, der auf einer Spalte oder einer Kombination von Spalten basiert. Beispielsweise kann es Spalten mit einer eindeutigen Einschränkung oder einem konfigurierten Index geben. Verwenden Sie diese Spalten, um einen neuen Primärschlüssel für Tabellen in Ihrer Quelldatenbank zu generieren. Beispiel:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
Ersetzen Sie Folgendes:
- TABLE_NAME durch den Namen der Tabelle, die keinen Primärschlüssel hat.
- COLUMN_NAME durch den Namen einer Spalte mit einer eindeutigen Einschränkung oder einem Index, die Sie als Primärschlüssel verwenden können.
Primärschlüssel mit allen Spalten erstellen
Wenn Sie keine bereits vorhandene Einschränkung haben, die als Primärschlüssel dienen könnte, erstellen Sie Primärschlüssel mit allen Spalten der Tabelle. Achten Sie darauf, dass Sie die maximale Länge des Primärschlüssels, die von Ihrer PostgreSQL-Instanz zulässig ist, nicht überschreiten.
Wenn Sie einen zusammengesetzten Primärschlüssel auf diese Weise erstellen, müssen Sie alle Spaltennamen, die Sie verwenden möchten, explizit auflisten. Es ist nicht möglich, eine Anweisung zu verwenden, um alle Spaltennamen für diesen Zweck abzurufen. Beispiel:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
Ersetzen Sie Folgendes:
- TABLE_NAME durch den Namen der Tabelle, die keinen Primärschlüssel hat.
- COLUMN_NAME_1, COLUMN_NAME_2 usw. durch die Namen der Spalten, die Sie zum Erstellen des Primärschlüssels verwenden möchten.
Eindeutige Einschränkung mit der Pseudospalte
ROWIDerstellenOracle-Datenbanken verwenden die Pseudospalte
ROWID, um den Speicherort jeder Zeile in einer Tabelle zu speichern. Wenn Sie Oracle-Tabellen ohne Primärschlüssel migrieren möchten, können Sie in der PostgreSQL-Zieldatenbank eineROWID-Spalte hinzufügen. Database Migration Service füllt die Spalte mit den entsprechenden numerischen Werten aus der Oracle-PseudospalteROWIDder Quelle.Führen Sie den folgenden Befehl aus, um die Spalte hinzuzufügen und als Primärschlüssel festzulegen:
ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL; CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid; ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq'); ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);
Ersetzen Sie Folgendes:
- TABLE_NAME durch den Namen der Tabelle, in der Sie die Spalte hinzufügen möchten.
- CONSTRAINT_DISPLAY_NAME durch die Kennung für die Einschränkung
PRIMARY KEY.
Nächste Schritte
- Mit Konvertierungsarbeitsbereichen arbeiten
- Weitere Informationen zu Gemini-basierten Konvertierungsfunktionen