我在 PostgreSQL 9.2 上对表进行了分区,每个表都具有如下所示的分区函数:
CREATE OR REPLACE FUNCTION myPartitionSelectionFunction()
RETURNS trigger AS
$BODY$
BEGIN
IF ( NEW.PartitionColumn < DATE '2010-08-08 00:00:00') THEN INSERT INTO MyPartitionedTable_Week_31_2010 VALUES (NEW.*);
ELSIF ( NEW.PartitionColumn < DATE '2010-08-15 00:00:00' AND NEW.PartitionColumn >= DATE '2010-08-08 00:00:00') THEN INSERT INTO MyPartitionedTable_Week_32_2010 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'PartitionColumn out of range. Update myPartitionSelectionFunction()';
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql
所以,每周都是一个新的分区。问题是每周更新数百个函数。我必须自动化,每个插入的触发器是不可行的。这个想法是创建一个由 cron 调用的函数来更新每个分区函数,在最终的 ELSE 之前添加另一个 ELSIF。但是我找不到一种方法来遍历每个具有“分区”名称的函数,然后检索它的代码(像 \d 这样的 psql 命令在函数中不起作用,对吧?)以添加新的 ELSIF 和相应地更新(ALTER)每个函数,在此过程中创建一个新分区。
所以,我现在最大的问题是:
一旦有“分区”名称,我如何迭代(使用光标?)每个函数,然后检索它的代码,在 ELSE 之前添加另一个 ELSIF 并更新(ALTER)它的内容不会有陷入无限循环的风险?
任何帮助深表感谢。谢谢。