我可以想象按日期(特别是日志)的表分区是广泛使用的东西,但我无法找到我的问题的好答案。
我想按周创建一个表分区(记录数很大,每月都要创建)。它是每周一次的原因是我需要算法的数据,该算法将在过程中寻找日期。
我的问题是我希望它考虑一周来创建分区并使用“典型”方法我必须手动创建它。像这样的东西。
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
如果分区不存在,则在插入之前创建它,但考虑到插入的记录数量,这会效率低下。
我的另一种选择是每周运行一个外部进程来创建这个分区,但我试图避免这种情况。
是否有一个我缺少的更有效的解决方案,例如用于每月检查?