Eseguire la migrazione delle tabelle senza chiavi primarie

Questa pagina spiega come eseguire la migrazione delle tabelle Oracle che non dispongono già di chiavi primarie.

Database Migration Service richiede che le tabelle PostgreSQL di destinazione abbiano chiavi primarie. L'area di lavoro di conversione di Database Migration Service predefinita gestisce automaticamente questo problema creando colonne rowid per le tabelle che non hanno chiavi primarie.

Tuttavia, se utilizzi l'area di lavoro di conversione precedente con lo strumento di migrazione Ora2Pg e le tabelle di origine Oracle non hanno chiavi primarie, devi creare le chiavi manualmente.

Le sezioni seguenti forniscono opzioni per creare chiavi principali per le tabelle di origine Oracle.

Creare una chiave primaria utilizzando le colonne esistenti

La tabella potrebbe già avere una chiave primaria logica basata su una colonna o su una combinazione di colonne. Ad esempio, potrebbero essere presenti colonne con un vincolo o un indice unico configurato. Utilizza queste colonne per generare una nuova chiave primaria nell'istanza PostgreSQL di destinazione.

Crea una chiave primaria utilizzando la colonna rowid

I database Oracle utilizzano una pseudocolonna rowid per memorizzare la posizione di ogni riga in una tabella. Per eseguire la migrazione delle tabelle Oracle che non hanno chiavi primarie, aggiungi una nuova colonnarowid nel database PostgreSQL di destinazione. Database Migration Service compila la colonna con i valori numerici corrispondenti della pseudocolonna rowid Oracle di origine.

Per aggiungere la colonna e impostarla come chiave primaria, esegui quanto segue:

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_NAME PRIMARY KEY (rowid);

Sostituisci quanto segue:

  • TABLE_NAME: il nome della tabella in cui vuoi aggiungere la colonna.
  • CONSTRAINT_NAME: l'identificatore del vincolo PRIMARY KEY.

Crea una chiave primaria utilizzando tutte le colonne

Se non puoi utilizzare le opzioni descritte in precedenza e la tabella Oracle di origine non contiene righe duplicate, crea una chiave primaria utilizzando tutte le colonne della tabella. Assicurati di non superare la lunghezza massima della chiave primaria consentita dall'istanza PostgreSQL.