Migra tablas sin claves primarias

En esta página, se explica cómo migrar tablas de Oracle que aún no tienen claves primarias.

Database Migration Service requiere que tus tablas de PostgreSQL de destino tengan claves primarias. El lugar de trabajo de conversión predeterminado de Database Migration Service controla esto automáticamente creando columnas rowid para las tablas que no tienen claves primarias.

Sin embargo, si usas el lugar de trabajo de conversión heredado con la herramienta de migración de Ora2Pg y tus tablas de origen de Oracle no tienen claves primarias, debes crear las claves manualmente.

En las siguientes secciones, se proporcionan opciones para crear claves primarias para tus tablas de origen de Oracle.

Crea una clave primaria con columnas existentes

Es posible que tu tabla ya tenga una clave primaria lógica basada en una columna o una combinación de columnas. Por ejemplo, puede haber columnas con una restricción única o un índice configurados. Usa estas columnas para generar una clave primaria nueva en la instancia de PostgreSQL de destino.

Crea una clave primaria con la columna rowid

Las bases de datos de Oracle usan una pseudocolumna rowid para almacenar la ubicación de cada fila en una tabla. Para migrar tablas de Oracle que no tienen claves primarias, agrega una nueva columna rowid en la base de datos de PostgreSQL de destino. Database Migration Service completa la columna con los valores numéricos correspondientes de la pseudocolumna rowid de Oracle de origen.

Para agregar la columna y establecerla como clave primaria, ejecuta lo siguiente:

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);

Reemplaza lo siguiente:

  • TABLE_NAME: Es el nombre de la tabla en la que deseas agregar la columna.
  • CONSTRAINT_NAME: Es el identificador de la restricción PRIMARY KEY.

Crea una clave primaria con todas las columnas

Si no puedes usar las opciones descritas anteriormente y tu tabla fuente de Oracle no tiene filas duplicadas, crea una clave primaria con todas las columnas de la tabla. Asegúrate de no exceder la longitud máxima de la clave primaria que permite tu instancia de PostgreSQL.