Postgres - 复制表 INCLUDING CONSTRAINT 不包含约束

les*_*ese 6 postgresql constraint postgresql-9.1 table

如果我明确要求,该语句为什么不复制约束?

CREATE TABLE backup_schema.permissions (LIKE public.permissions INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING STORAGE INCLUDING COMMENTS);
INSERT INTO backup_schema.permissions
    SELECT *
    FROM public.permissions
    WHERE community_id=123;
Run Code Online (Sandbox Code Playgroud)

使用 pgadmin3 验证我发现新表(例如:backup_schema)的约束是: 在此输入图像描述

但在公共模式的原始表中是这样的: 在此输入图像描述

dez*_*zso 10

文档INCLUDING CONSTRAINTS(强调我的):

\n\n
\n

非空约束总是复制到新表中。仅当指定CHECK时才会复制约束;其他类型的约束永远不会被复制。另外,当请求约束时,列约束和表约束 \xe2\x80\x94 之间不作区分,所有检查约束都会被复制。INCLUDING CONSTRAINTS

\n
\n\n

外键显然属于“其他约束”组,这就是为什么您的两个 FK 没有被复制的原因。

\n\n

有趣的是,9.3版本的文档有不同的措辞,并没有把上面的内容说得那么清楚。

\n