我擁有分區表上的PostgreSQL 9.2每一個具有分區功能,看起來像這樣:功能/程序更新(ALTER)其他功能/程序
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)每個功能,創建一個新的分區。
所以,我現在最大的問題是:
如何遍歷每個功能(?使用光標)曾在其上有「分區」的名稱,然後檢索它的代碼,之前添加另一個ELSIF ELSE和更新(ALTER)它的內容不會陷入無限循環?
任何幫助,非常感謝。謝謝。
查詢:SELECT proname,prosrc FROM pg_catalog.pg_namespaceÑ JOIN pg_catalog.pg_proc p ON pronamespace = n.oid WHERE nspname = '公衆'; 得到我們的程序/功能的定義。 –