在 PostgreSQL 9.5 中,我有表格中的列
prefix_last_modified timestamp without time zone NOT NULL DEFAULT (clock_timestamp() AT TIME ZONE 'UTC')
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来设置在每次更新行时自动更新的最后修改的值,我发现这篇定义函数的好帖子:
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有任何方法可以将列名传递给 PostgreSQL 函数并将其执行到NEW行?例如
CREATE OR REPLACE FUNCTION update_modified_column(varchar column)
RETURNS TRIGGER AS $$
BEGIN
NEW.column = now();
RETURN NEW;
END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud) 我对以下脚本有疑问:
CREATE DOMAIN shop.amount AS numeric(8,2) DEFAULT 0 NOT NULL CHECK (value > 0::numeric);
CREATE TYPE shop.money AS (
m_amount shop.amount,
m_currency shop.currency
);
CREATE TABLE shop.order_item
(
oi_id bigserial NOT NULL,
oi_order_id bigint NOT NULL,
oi_article_id bigint NOT NULL,
oi_article_price shop.money NOT NULL,
CONSTRAINT oi_pk_id PRIMARY KEY (oi_id),
CONSTRAINT oi_fk_article_id FOREIGN KEY (oi_article_id)
REFERENCES shop.article (a_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT oi_pk_order_id FOREIGN KEY (oi_order_id)
REFERENCES shop."order" (o_id) MATCH SIMPLE
ON UPDATE NO …Run Code Online (Sandbox Code Playgroud)