迁移没有主键的表

本页介绍了如何迁移尚无主键的 Oracle 表。

Database Migration Service 要求目标 PostgreSQL 表具有主键。默认的 Database Migration Service 转换工作区会自动为没有主键的表创建 rowid 列,以便处理此问题。

但是,如果您将旧版转换工作区与 Ora2Pg 迁移工具搭配使用,并且您的 Oracle 源表没有主键,则需要手动创建主键。

以下部分提供了有关如何为 Oracle 源表创建主键的选项。

使用现有列创建主键

您的表可能已经具有基于某个列或多列组合的逻辑主键。例如,某些列可能配置了唯一性约束条件或索引。使用这些列在目标 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_NAMEPRIMARY KEY 约束条件的标识符。

使用所有列创建主键

如果您无法使用前面介绍的选项,并且您的 Oracle 源表没有任何重复行,请使用表中的所有列创建主键。确保主键的长度不超过 PostgreSQL 实例允许的长度上限。