Return BEFORE UPDATE 触发器中的单个 SELECT 行
Return single SELECT row in BEFORE UPDATE trigger
来自41.9.1. Triggers on Data Changes:
To alter the row to be stored, it is possible to replace single values directly in NEW
and return the modified NEW
, or to build a complete new record/row to return.
我想做后者。我有一个 SELECT
保证 return 一行。如何使用?
这是一个示例:
CREATE TABLE sample (
id integer PRIMARY KEY,
sthg text NOT NULL,
ip inet
);
CREATE FUNCTION sample_trig() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
SELECT 42, 'yes!', '127.0.0.1'::inet INTO NEW;
RETURN NEW;
END;$$;
CREATE TRIGGER sample_trig
BEFORE INSERT ON sample FOR EACH ROW
EXECUTE PROCEDURE sample_trig();
INSERT INTO sample VALUES (1, 'new', NULL);
TABLE sample;
id | sthg | ip
----+------+-----------
42 | yes! | 127.0.0.1
(1 row)
来自41.9.1. Triggers on Data Changes:
To alter the row to be stored, it is possible to replace single values directly in
NEW
and return the modifiedNEW
, or to build a complete new record/row to return.
我想做后者。我有一个 SELECT
保证 return 一行。如何使用?
这是一个示例:
CREATE TABLE sample (
id integer PRIMARY KEY,
sthg text NOT NULL,
ip inet
);
CREATE FUNCTION sample_trig() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
SELECT 42, 'yes!', '127.0.0.1'::inet INTO NEW;
RETURN NEW;
END;$$;
CREATE TRIGGER sample_trig
BEFORE INSERT ON sample FOR EACH ROW
EXECUTE PROCEDURE sample_trig();
INSERT INTO sample VALUES (1, 'new', NULL);
TABLE sample;
id | sthg | ip
----+------+-----------
42 | yes! | 127.0.0.1
(1 row)