
# 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();
```
请注意，触发器无法等价外键约束，可能还会影响使用性能，并提升数据库系统的维护难度。建议您注释掉表外键，通过业务保证数据的完整性。
