9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面
PostgreSQL 9.5.3 中文手册
上一页上一级章 37. 事件触发器下一页

37.5. 表重写事件触发器例子

多亏table_rewrite事件, 实现表重写策略仅仅允许在维护窗口重写。

这有个实现该策略的例子。

CREATE OR REPLACE FUNCTION no_rewrite()
 RETURNS event_trigger
 LANGUAGE plpgsql AS
$$
---
--- 执行本地表重写策略:
--- public.foo不允许重写,
--- 在凌晨1点到6点之间允许重写其他表
--- 除非他们有100多块
---
DECLARE
 table_oid oid := pg_event_trigger_table_rewrite_oid();
 current_hour integer := extract('hour' from current_time);
 pages integer;
 max_pages integer := 100;
BEGIN
 IF pg_event_trigger_table_rewrite_oid() = 'public.foo'::regclass
 THEN
 RAISE EXCEPTION 'you''re not allowed to rewrite the table %',
 table_oid::regclass;
 END IF;
 SELECT INTO pages relpages FROM pg_class WHERE oid = table_oid;
 IF pages > max_pages
 THEN
 RAISE EXCEPTION 'rewrites only allowed for table with less than % pages',
 max_pages;
 END IF;
 IF current_hour NOT BETWEEN 1 AND 6
 THEN
 RAISE EXCEPTION 'rewrites only allowed between 1am and 6am';
 END IF;
END;
$$;
CREATE EVENT TRIGGER no_rewrite_allowed
 ON table_rewrite
 EXECUTE PROCEDURE no_rewrite();

上一页起始页下一页
一个完整的事件触发器实例上一级规则系统
<
/BODY>

AltStyle によって変換されたページ (->オリジナル) /