我有一个分区表,其中有一个名为 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中存在的记录在创建的新分区中被清空
我正在寻找的是,当运行run_maintenance时创建额外的分区时,default_table中存在的记录在创建的新分区中被清空。
据我了解这是不可能的。我不是专家,但如果您的默认分区中有数据,您可以运行:
postgres=# CALL partman.partition_data_proc('raw.bupa_trace_resultados');
将其移出并移至分区表。我认为您必须确保在将数据插入默认分区之前调用
partman.run_maintenance
。