PostgreSQL 中自动向字段添加时间戳

C.-*_*tar 4 postgresql timestamp

我在 PostgreSQL 中创建了一个小型数据库来管理我的论文数据。我刚刚开始使用 Postgres,所以这可能是一个新手问题。我在几个表中添加了一列,该列应该保存某个字段的最后更新。其中一个表如下所示(此处相关的列是lastupdate

-- Drop table

-- DROP TABLE public.finds;

CREATE TABLE public.finds (
    id bigserial NOT NULL,
    id_investigations int8 NOT NULL,
    quote_short varchar NULL,
    "group" varchar NULL,
    "type" varchar NULL,
    subtype varchar NULL,
    description varchar NULL,
    "number" int4 NULL,
    certainty bool NULL,
    note varchar NULL,
    checked bool NULL,
    lastupdate timestamptz NULL,
    CONSTRAINT finds_check_group CHECK ((("group")::text = ANY ((ARRAY['Keramik'::character varying, 'Waffe'::character varying, 'Werkzeug'::character varying, 'Schmuck'::character varying])::text[]))),
    CONSTRAINT finds_pkey PRIMARY KEY (id),
    CONSTRAINT id_investigations FOREIGN KEY (id_investigations) REFERENCES investigations(id)
);

-- Permissions

ALTER TABLE public.finds OWNER TO postgres;
GRANT ALL ON TABLE public.finds TO postgres;
Run Code Online (Sandbox Code Playgroud)

我希望最后一次更新在编辑时采用当前时间戳。有没有一种简单的方法可以做到这一点?

Lau*_*lbe 5

您可以使用这样的触发器:

CREATE FUNCTION last_upd_trig() RETURNS trigger
   LANGUAGE plpgsql AS
$$BEGIN
   NEW.lastupdate := current_timestamp;
   RETURN NEW;
END;$$;

CREATE TRIGGER last_upd_trigger
   BEFORE INSERT OR UPDATE ON finds
   FOR EACH ROW
   EXECUTE PROCEDURE last_upd_trig();
Run Code Online (Sandbox Code Playgroud)