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)