尴尬/错误的PostgreSQL外键定义

时间:2018-02-24 10:32:50

标签: postgresql foreign-keys pg-dump

作为一名数据库开发人员,当我尝试将数据转储转换为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 

A' tlesson'表'成员' constraint =>

  ALTER TABLE ONLY members
    ADD CONSTRAINT friend_fk FOREIGN KEY (friend_id) REFERENCES members(member_id);
  • 也就是说,' friend_id'列将自己的表的主键称为外键。

我应该放弃朋友_fk'约束删除我有的通知?

1 个答案:

答案 0 :(得分:2)

如果你总是丢弃整个数据库,那么这不是问题,因为生成的SQL(或pg_restore)只在加载了所有数据后启用(创建)外键,因此在这种情况下没有问题。

但是,如果您只转储没有FK的单个表,那么只有在恢复之前手动删除FK,然后在之后重新创建它时,导入才会起作用。

原因是如果你有循环引用,几乎不可能以正确的顺序生成INSERT语句