PostgreSQL分区表如何向VALUES列表添加新值(如17)
给PostgreSQL LIST分区添加新值的方法
针对你提到的LIST分区场景,要给已存在的分区VALUES列表添加新值(比如17),具体操作分两种情况:
情况1:使用PostgreSQL 13及以上版本
PostgreSQL 13开始支持直接修改LIST分区的VALUES集合,执行以下语句即可:
ALTER TABLE ${prefix}_main_table ALTER PARTITION ${prefix}_partition_table ADD VALUES (17);
这条语句会直接把17加入到目标分区的VALUES列表中,无需额外迁移数据。
情况2:使用PostgreSQL 12及以下版本
低版本PostgreSQL不支持直接修改分区VALUES,需要通过迂回方式实现:
- 第一步:创建临时分区并关联主表,临时存放新值对应的数据(如果主表中已有17的数据,会自动路由到这个临时分区)
CREATE TABLE ${prefix}_temp_partition PARTITION OF ${prefix}_main_table FOR VALUES IN (17);
- 第二步:拆分原分区
ALTER TABLE ${prefix}_main_table DETACH PARTITION ${prefix}_partition_table;
- 第三步:删除原分区,重新创建包含新值的分区并关联主表
DROP TABLE ${prefix}_partition_table; CREATE TABLE ${prefix}_partition_table PARTITION OF ${prefix}_main_table FOR VALUES IN (1, 3, 5, 7, 15, 17);
- 第四步:迁移临时分区的数据到新分区,然后清理临时分区
INSERT INTO ${prefix}_partition_table SELECT * FROM ${prefix}_temp_partition; ALTER TABLE ${prefix}_main_table DETACH PARTITION ${prefix}_temp_partition; DROP TABLE ${prefix}_temp_partition;
你之前尝试的语句无效,是因为PostgreSQL没有add partition('partition name' values(...))这种语法,正确的语法需要针对主表操作,指定要修改的分区并添加值(高版本),或者按低版本的步骤操作。
内容的提问来源于stack exchange,提问作者FaiLError
相关产品推荐
相关产品推荐

