文档首页/ 数据库和应用迁移 UGO/ 用户指南/ 语法转换指南/ 转换错误码/ 通用转换错误码/ U0000004:GaussDB的外键引用列必须是主键或者唯一键
更新时间:2025-06-04 GMT+08:00

U0000004:GaussDB的外键引用列必须是主键或者唯一键

描述

数据库类型与版本

  • 源库类型与版本:所有涉及表外键的源数据库类型。
  • 目标库类型与版本:GaussDB集中式版。

语法示例

当UGO识别到外键的引用列不是主键或者唯一键时,将生成此错误提示。

GaussDB集中式版表外键约束的引用列必须是唯一键或者主键,如下示例在GaussDB集中式版中不支持。

CREATE TABLE demo1 (
    id INT,
    demo1_col VARCHAR(64)
);
CREATE TABLE demo2 (
    id INT,
    demo2_col VARCHAR(64),
    CONSTRAINT demo2_fk FOREIGN KEY (id) REFERENCES demo1 (id)
);

改造建议

方案一:如下示例所示,删除表外键约束。
CREATE TABLE demo2 (
    id INT,
    demo2_col VARCHAR(64)/*,
    CONSTRAINT demo2_fk FOREIGN KEY (id) REFERENCES demo1 (id)*/
);

此时需要通过业务来保证demo2表id列对demo1表id列的引用关系。

方案二:如下示例所示,将外键引用的列修改为主键约束或者唯一约束。

ALTER TABLE demo1 ADD UNIQUE(id);

这种情况下会修改demo1表的数据完整性约束,需要您充分评估业务影响。