运行 pg_partman.run_maintenance() 时出现约束错误

问题描述 投票:0回答:1

我有一个分区表,其中有一个名为 tablename_default 的分区以及第一次创建的分区池。现在 tablename_default 的记录超出了每月分区参数,当我运行 pg_partman.run_maintenance() 时,即将出现的错误是


SQL Error [P0001]: ERROR: updated partition constraint for default partition would be violated by some row
CONTEXT: SQL statement "ALTER TABLE raw.bupa_trace_resultados ATTACH PARTITION raw.bupa_trace_resultados_p2023_11 FOR VALUES FROM ('2023-11-01 00:00:00-03') TO ('2023-12-01 00:00:00-03')"
PL/pgSQL function create_partition_time(text,timestamp with time zone[],boolean,boolean) line 222 at EXECUTE
PL/pgSQL function partman.run_maintenance(text,boolean,boolean,boolean) line 280 at assignment
DETAIL: 
HINT: 
CONTEXT: PL/pgSQL function create_partition_time(text,timestamp with time zone[],boolean,boolean) line 442 at RAISE
PL/pgSQL function partman.run_maintenance(text,boolean,boolean,boolean) line 280 at assignment
DETAIL: 
HINT: 
  Where: PL/pgSQL function partman.run_maintenance(text,boolean,boolean,boolean) line 398 at RAISE

我想可能是因为default_table有记录要落入即将创建的分区中,所以触发了约束。

你能帮我吗?

我尝试使用详细参数运行partman.run_maintenance()以获取更多详细信息,但我只引用了create_partition_time函数,但我无法获得更多答案。

我正在寻找的是,当运行run_maintenance时创建额外的分区时,default_table中存在的记录在创建的新分区中被清空

postgresql constraints pg-partman
1个回答
0
投票

我正在寻找的是,当运行run_maintenance时创建额外的分区时,default_table中存在的记录在创建的新分区中被清空。

据我了解这是不可能的。我不是专家,但如果您的默认分区中有数据,您可以运行:

postgres=# CALL partman.partition_data_proc('raw.bupa_trace_resultados');

将其移出并移至分区表。我认为您必须确保在将数据插入默认分区之前调用

partman.run_maintenance

© www.soinside.com 2019 - 2024. All rights reserved.