更新时间:2025-06-04 GMT+08:00
U0000002:GaussDB分布式不支持表外键约束
描述
数据库类型与版本
- 源库类型与版本:所有涉及外键约束的源数据库类型。
- 目标库类型与版本:GaussDB分布式版。
语法示例
默认情况下,UGO保留表外键约束不转换,并生成此错误提示。
GaussDB分布式不支持表外键约束,如下示例在GaussDB分布式中不支持。
CREATE TABLE ref_types (
dbtype VARCHAR(100) PRIMARY KEY,
root_level_type VARCHAR(100)
);
CREATE TABLE dbtype_objtype_map (
dbtype VARCHAR(100),
object_type VARCHAR(100),
is_supported INT,
CONSTRAINT dbtype_objtype_map_fk_1 FOREIGN KEY (dbtype) REFERENCES ref_types(dbtype) ON DELETE CASCADE ON UPDATE RESTRICT
);
改造建议
方案一:修改“外键约束”转换配置项。
方案二:参考如下示例,通过触发器来实现外键约束(仅包括数据依赖约束,不包括数据级联删除功能)。
CREATE TABLE dbtype_objtype_map (
dbtype VARCHAR(100),
object_type VARCHAR(100),
is_supported INT
);
CREATE OR REPLACE FUNCTION dbtype_objtype_map_foreign_func() RETURN TRIGGER AS
DECLARE
reference_count INT;
BEGIN
SELECT count(dbtype) INTO reference_count FROM ref_types WHERE dbtype = NEW.dbtype;
IF reference_count > 0 THEN
RETURN NEW;
ELSE
RAISE EXCEPTION 'Cannot add or update a child row: a foreign key constraint fails ';
END IF;
END;
CREATE TRIGGER dbtype_objtype_map_foreign_tri
BEFORE UPDATE OR INSERT ON dbtype_objtype_map
FOR EACH ROW
EXECUTE PROCEDURE dbtype_objtype_map_foreign_func();
请注意,触发器无法等价外键约束,可能还会影响使用性能,并提升数据库系统的维护难度。建议您注释掉表外键,通过业务保证数据的完整性。
父主题: 通用转换错误码