如何使用LIKE创建表并同步原表的PRIMARY KEY?
解决使用LIKE创建表并添加主键的语法错误
你的语句出错的核心原因是LIKE子句和后续的PRIMARY KEY约束之间缺少逗号,导致PostgreSQL无法正确解析两个表定义元素的分隔逻辑。
正确的手动添加主键语句
只需在LIKE子句末尾添加逗号,再显式定义主键即可:
CREATE TABLE new_123 ( LIKE old_123 INCLUDING DEFAULTS, PRIMARY KEY (id) );
可选:自动复制原表所有约束(PostgreSQL 12及以上版本)
如果需要完整复制原表的所有约束(包括主键),可以使用INCLUDING CONSTRAINTS选项,无需手动指定主键列:
CREATE TABLE new_123 ( LIKE old_123 INCLUDING DEFAULTS INCLUDING CONSTRAINTS );
注意:该选项会复制原表的所有约束(外键、唯一约束等),若仅需主键,手动定义的方式更灵活。
快速确认原表主键列(可选)
如果不确定原表的主键列名称,可通过系统表查询获取:
SELECT string_agg(attname, ', ') AS primary_key_columns FROM pg_constraint JOIN pg_attribute ON attrelid = conrelid AND attnum = ANY(conkey) WHERE conrelid = 'old_123'::regclass AND contype = 'p';
查询结果会返回原表的主键列组合,可直接用于新表的主键定义。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

