本页介绍了如何迁移尚无主键的 Oracle 表。
Database Migration Service 要求目标 PostgreSQL 表具有主键。默认的 Database Migration Service 转换工作区会自动为没有主键的表创建 rowid
列,以便处理此问题。
但是,如果您将旧版转换工作区与 Ora2Pg 迁移工具搭配使用,并且您的 Oracle 源表没有主键,则需要手动创建主键。
以下部分提供了有关如何为 Oracle 源表创建主键的选项。
使用现有列创建主键
您的表可能已经具有基于某个列或多列组合的逻辑主键。例如,某些列可能配置了唯一性约束条件或索引。使用这些列在目标 AlloyDB for PostgreSQL 集群中生成新的主键。
使用 rowid
列创建主键
Oracle 数据库使用 rowid
伪列来存储表中每行的行号。如需迁移没有主键的 Oracle 表,请在目标 PostgreSQL 数据库中添加新的 rowid
列。Database Migration Service 会使用源 Oracle rowid
伪列中的相应数值填充该列。
如需添加该列并将其设置为主键,请运行以下命令:
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);
替换以下内容:
- TABLE_NAME:您要添加列的表的名称。
- CONSTRAINT_NAME:
PRIMARY KEY
约束条件的标识符。
使用所有列创建主键
如果您无法使用前面介绍的选项,并且您的 Oracle 源表没有任何重复行,请使用表中的所有列创建主键。确保主键的长度不超过 PostgreSQL 集群允许的上限。