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_fk' 约束以删除我收到的通知?

如果您总是删除整个数据库,那么这不是问题,因为生成的 SQL(或 pg_restore)将仅在加载所有数据后启用(创建)外键,所以在这种情况下没有问题。

但是,如果您只转储一个没有 FK 的 table,那么只有在恢复之前手动删除 FK,然后 re-create 之后,导入才会起作用。

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