这是一个跟进问题: old example
CREATE TABLE "x"."y"(
"z" timestamp NOT NULL,
"a" Timestamp NOT NULL DEFAULT z + 18 months,
);
我希望指定一个触发器,一旦更新z,就会更新a。
的内容CREATE TRIGGER a_update
AFTER UPDATE on z
on x.y
NEW.a = NEW.z + interval '18 months'
你能帮我解释一下语法吗?
答案 0 :(得分:1)
由于您的方案中的a
始终是z
之后的18个月,因此实际存储在任何地方都没有意义。将它作为视图中的计算列会更容易:
CREATE VIEW y_view AS
SELECT z, z + INTERVAL '18 MONTH' AS a
FROM y;
答案 1 :(得分:0)
PostgreSQL中的触发器是通过首先创建一个函数,然后将该函数作为documented in the Postgres manual附加到适当的表来实现的。
manual page for CREATE TRIGGER
有这个例子,应该很容易适应你的实际名字:
CREATE TRIGGER check_update
BEFORE UPDATE ON accounts
FOR EACH ROW
WHEN (OLD.balance IS DISTINCT FROM NEW.balance)
EXECUTE PROCEDURE check_account_update();
对于实际触发功能的定义,你只需要填写这个的主体; OLD
和NEW
别名表示整行的旧值和新值:
CREATE FUNCTION my_trigger() RETURNS trigger
AS $$
NEW.foo := OLD.foo + 1;
RETURN NEW;
$$
LANGUAGE plpgsql;
还有更多注释和示例on this manual page。