En esta página, se explica cómo migrar tablas de Oracle que no tienen claves primarias.
En Generación automática de clave primaria primarias, se explica cómo Database Migration Service controla las tablas de origen a las que les faltan claves primarias.
En Cómo agregar claves primarias faltantes de forma manual, se muestran consultas de ejemplo que puedes usar para agregar claves primarias faltantes en tu esquema convertido.
Descripción general de la generación automática de clave primaria
Las tablas sin claves primarias no prometen una replicación coherente. Database Migration Service solo migra las tablas que tienen claves primarias. Si tu base de datos de origen incluye tablas que no tienen claves primarias, Database Migration Service puede controlarlas de las siguientes maneras:
- Cuando
conviertes tu código fuente y esquema, Database Migration Service puede crear automáticamente las claves primarias faltantes agregando
ROWIDcolumnas en las tablas de destino. Este proceso automatizado requiere que tus tablas de origen cumplan con los siguientes requisitos:- No tener claves primarias
- No tener una restricción
UNIQUEsin columnas anulables - No tener un índice
UNIQUEsin columnas anulables
- En los espacios de trabajo de conversión heredados, Database Migration Service no crea claves primarias automáticamente. Si usas un espacio de trabajo de conversión heredado, debes agregar manualmente las claves primarias faltantes a las tablas en el esquema de PostgreSQL convertido.
Cómo agregar claves primarias faltantes de forma manual
Para migrar tablas de Oracle sin claves primarias, haz lo siguiente:
- Usa un espacio de trabajo de conversión para convertir tu código fuente y esquema.
- Para los espacios de trabajo de conversión estándar, consulta Cómo convertir tu código fuente y esquema.
- Para los espacios de trabajo de conversión heredados, consulta Cómo trabajar con espacios de trabajo de conversión heredados.
- Conéctate a tu instancia de Cloud SQL de destino con un cliente de SQL. Puedes usar los siguientes métodos:
-
Cliente
psql. Puedes usar este método para conectarte a la IP privada de tu instancia, pero es posible que debas crear una máquina virtual de Compute Engine. -
gcloud sql connectcomando. Este comando solo funciona para instancias de Cloud SQL que tienen habilitada una dirección IP pública.
-
Cliente
- Crea las restricciones de clave primaria faltantes para tus tablas. Para obtener más
información sobre las claves primarias, consulta
Claves primarias en la documentación de PostgreSQL.
También puedes expandir las siguientes secciones para ver comandos SQL de ejemplo:
Crea claves primarias 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 o un índice únicos configurados. Usa estas columnas para generar una clave primaria nueva para las tablas de tu base de datos de origen. Por ejemplo:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
Reemplaza lo siguiente:
- TABLE_NAME por el nombre de la tabla que no tiene una clave primaria.
- COLUMN_NAME por el nombre de una columna con restricción o índice únicos que puedes usar como clave primaria.
Crea una clave primaria con todas las columnas
Si no tienes una restricción preexistente que pueda servir como clave primaria, crea claves primarias con todas las columnas de la tabla. Asegúrate de no exceder la longitud máxima de la clave primaria permitida por tu instancia de PostgreSQL.
Cuando creas una clave primaria compuesta de esta manera, debes enumerar explícitamente todos los nombres de columna que deseas usar. No es posible usar una instrucción para recuperar todos los nombres de columna para este propósito. Por ejemplo:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
Reemplaza lo siguiente:
- TABLE_NAME por el nombre de la tabla que no tiene una clave primaria.
- COLUMN_NAME_1, COLUMN_NAME_2 , etc., por los nombres de las columnas que deseas usar para crear la clave primaria.
Crea una restricción única con la seudocolumna
ROWIDLas bases de datos de Oracle usan la
ROWIDseudocolumna para almacenar la ubicación de cada fila en una tabla. Para migrar tablas de Oracle que no tienen claves primarias, puedes agregar unaROWIDcolumna en la base de datos PostgreSQL de destino. Database Migration Service propaga la columna con los valores numéricos correspondientes de la seudocolumnaROWIDde 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_DISPLAY_NAME PRIMARY KEY (rowid);
Reemplaza lo siguiente:
- TABLE_NAME por el nombre de la tabla en la que deseas agregar la columna.
- CONSTRAINT_DISPLAY_NAME por el identificador de la restricción
PRIMARY KEY.
¿Qué sigue?
- Continúa trabajando con espacios de trabajo de conversión.
- Obtén más información sobre las funciones de conversión con tecnología de Gemini.