- Currently, <literal>WHEN</literal> expressions cannot contain
- subqueries.
subqueries in row trigger's is not supported in your patch so the the documentation have to reflect it
+ </literal>UPDATE</literal> triggers are able to refer to both </literal>OLD</literal>
+ and <literal>NEW</literal>
Opening and ending tag mismatch on UPDATE and OLD literal so documentation build fails and please update the documentation on server programming section too
+ /*
+ * Plan the statement. No need to rewrite as it can only refer to the
+ * transition tables OLD and NEW, and the relation which is being
+ * triggered upon.
+ */
+ stmt = pg_plan_query(query, trigger->tgqual, 0, NULL);
+ dest = CreateDestReceiver(DestTuplestore);
+ store = tuplestore_begin_heap(false, false, work_mem);
+ tupdesc = CreateTemplateTupleDesc(1);
+ whenslot = MakeSingleTupleTableSlot(tupdesc, &TTSOpsMinimalTuple);
Instead of planning every time the trigger fire I suggest to store plan or prepared statement node so planning time can be saved
There are server crash on the following sequence of command
CREATE TABLE main_table (a int unique, b int);
CREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS '
BEGIN
RAISE NOTICE ''trigger_func(%) called: action = %, when = %, level = %'', TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;
RETURN NULL;
END;';
INSERT INTO main_table DEFAULT VALUES;
CREATE TRIGGER after_insert AFTER INSERT ON main_table
REFERENCING NEW TABLE AS NEW FOR EACH STATEMENT
WHEN (500 <= ANY(SELECT b FROM NEW union SELECT a FROM main_table))
EXECUTE PROCEDURE trigger_func('after_insert');
INSERT INTO main_table (a, b) VALUES
(101, 498),
(102, 499);
server crashed
regards
Surafel