Awkward/wrong PostgreSQL 外键定义
Awkward/wrong PostgreSQL foreign-key definition
作为一名数据库开发人员,当我尝试对 PostgreSQL(10.1) 数据库进行仅数据转储时,我遇到了这个通知 'tlesson'。
通知=>
pg_dump: NOTICE: there are circular foreign-key constraints on this table:
pg_dump: members
转储命令=>
$ pg_dump -U postgres -d translesson -a
一个'tlesson'table'members'约束=>
ALTER TABLE ONLY members
ADD CONSTRAINT friend_fk FOREIGN KEY (friend_id) REFERENCES members(member_id);
- 也就是说,'friend_id' 列引用自己的 table 的主键作为外键。
我是否应该放弃 'friend_fk' 约束以删除我收到的通知?
如果您总是删除整个数据库,那么这不是问题,因为生成的 SQL(或 pg_restore)将仅在加载所有数据后启用(创建)外键,所以在这种情况下没有问题。
但是,如果您只转储一个没有 FK 的 table,那么只有在恢复之前手动删除 FK,然后 re-create 之后,导入才会起作用。
原因是如果有循环引用,几乎不可能以正确的顺序生成 INSERT 语句
作为一名数据库开发人员,当我尝试对 PostgreSQL(10.1) 数据库进行仅数据转储时,我遇到了这个通知 'tlesson'。
通知=>
pg_dump: NOTICE: there are circular foreign-key constraints on this table:
pg_dump: members
转储命令=>
$ pg_dump -U postgres -d translesson -a
一个'tlesson'table'members'约束=>
ALTER TABLE ONLY members
ADD CONSTRAINT friend_fk FOREIGN KEY (friend_id) REFERENCES members(member_id);
- 也就是说,'friend_id' 列引用自己的 table 的主键作为外键。
我是否应该放弃 'friend_fk' 约束以删除我收到的通知?
如果您总是删除整个数据库,那么这不是问题,因为生成的 SQL(或 pg_restore)将仅在加载所有数据后启用(创建)外键,所以在这种情况下没有问题。
但是,如果您只转储一个没有 FK 的 table,那么只有在恢复之前手动删除 FK,然后 re-create 之后,导入才会起作用。
原因是如果有循环引用,几乎不可能以正确的顺序生成 INSERT 语句