PostgreSQL中能否使用create table as语句创建分区表?
你使用的这种创建分区表的方式不受支持,报错原因是PostgreSQL的CREATE TABLE ... AS(包括你用到的AS TABLE简写形式)属于CTAS(Create Table As Select)语法,该语法的作用是根据查询结果直接生成表结构和数据,设计上不允许在语句末尾追加PARTITION BY分区定义等额外表属性,因此会抛出42601语法错误。
处理方案
你可以改用LIKE语法继承源表的结构后再定义分区规则,示例写法如下:
CREATE TABLE archive.table1 ( LIKE work1.table1 INCLUDING ALL ) PARTITION BY RANGE (wk_date);
INCLUDING ALL参数会同步继承源表的字段类型、非空约束、索引定义、默认值等属性,如果你不需要继承全部属性,可以按需替换为INCLUDING DEFAULTS、INCLUDING CONSTRAINTS等单独参数。- 如果你后续需要将源表数据同步到新建的分区表,可单独执行INSERT语句完成数据迁移:
INSERT INTO archive.table1 SELECT * FROM work1.table1;
内容的提问来源于stack exchange,提问作者Thaz
相关产品推荐
相关产品推荐

