我可以想象,由日期(特别是对于日志)的表分区是广泛使用的东西,但我无法为我的问题找到一个很好的答案。Postgres按星期分区
我想按周创建一个表分区(记录的数量要大到使其每月)。它每周的原因是我需要一个算法的数据,该算法将查找日期作为过程的一部分。
我的问题是我希望它创建分区考虑周和使用“典型”的方法,我将不得不手动创建它。像这样的东西。
CREATE TABLE measurement_y2013w01 (
CHECK (logdate >= DATE '2013-01-07' AND logdate < DATE '2013-01-14')
) INHERITS (measurement);
CREATE TABLE measurement_y2006w02 (
CHECK (logdate >= DATE '2013-01-14' AND logdate < DATE '2013-01-21')
) INHERITS (measurement);
...
但我希望它自动生成。我不想为每个星期一个一个地创建分区。
我的命名规则是yYYYYwWW,用于命名分区或启动datadYYYYMMDD。
我想使用这样的事情在插入时检查分区:
SELECT
nmsp_parent.nspname AS parent_schema,
parent.relname AS parent,
nmsp_child.nspname AS child,
child.relname AS child_schema
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
,如果分区不存在插入之前建立,但是,这个缝了很多效率低下,考虑到插入的记录数。
我的另一种选择是每周创建一个外部进程创建此分区,但我试图避免这种情况。
有没有更有效的解决方案,我缺少这个,例如,用于月度检查?
您将有一个外部进程删除或移动旧分区不是吗?如果是这样,创建分区有什么问题? –
您可能想看看pg_partman,它可以自动执行关于分区的许多事情:https://github.com/keithf4/pg_partman/blob/master/doc/pg_partman.md –