Tabellen ohne Primärschlüssel migrieren

Auf dieser Seite wird erläutert, wie Sie Oracle-Tabellen ohne Primärschlüssel migrieren.

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.
    Wenn Ihre Tabellen diese Anforderungen nicht erfüllen, müssen Sie den Tabellen im konvertierten PostgreSQL-Schema manuell fehlende Primärschlüssel hinzufügen.
  • 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:

  1. Verwenden Sie einen Konvertierungsarbeitsbereich, um Ihren Quellcode und Ihr Schema zu konvertieren.
  2. 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.
  3. 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 ROWID erstellen

    Oracle-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 eine ROWID-Spalte hinzufügen. Database Migration Service füllt die Spalte mit den entsprechenden numerischen Werten aus der Oracle-Pseudospalte ROWID der 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