指定一个触发器来更新时间戳字段

Specifying a triger to update timestamp field

这是关于 的跟进问题: .

CREATE TABLE "x"."y"(
    "z" timestamp NOT NULL,
    "a" Timestamp NOT NULL DEFAULT z + 18 months,
);

我希望指定一个触发器,其中 a 在 z 更新后立即更新。

的内容
CREATE TRIGGER a_update
    AFTER UPDATE on z
    on x.y
    NEW.a = NEW.z + interval '18 months'

你能帮我看看语法吗?

因为在您的场景中 a 应该 总是 z 之后的 18 个月,所以实际上将它存储在任何地方都没有意义。将它作为视图中的计算列会容易得多:

CREATE VIEW y_view AS 
SELECT z, z + INTERVAL '18 MONTH' AS a 
FROM   y;

PostgreSQL 中的触发器是通过首先创建一个函数,然后将该函数附加到适当的 table 来实现的,如 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();

实际触发函数的定义,只需要填写this的body即可; OLDNEW 别名代表整行的旧值和新值:

CREATE FUNCTION my_trigger() RETURNS trigger
    AS $$
        NEW.foo := OLD.foo + 1;
        RETURN NEW;
    $$
    LANGUAGE plpgsql;

还有更多注释和示例on this manual page