From: | Andrew Dunstan <andrew(dot)dunstan(at)2ndquadrant(dot)com> |
---|---|
To: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | fast default vs triggers |
Date: | 2018-09-18 19:36:32 |
Message-ID: | 224e4807-395d-9fc5-2934-d5f85130f1f0@2ndQuadrant.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Tomas Vondra has pointed out to me that there's an issue with triggers
not getting expanded tuples for columns with fast defaults. Here is an
example that shows the issue:
andrew=# create table blurfl (id int);
CREATE TABLE
andrew=# insert into blurfl select x from generate_series(1,5) x;
INSERT 0 5
andrew=# alter table blurfl add column x int default 100;
ALTER TABLE
andrew=# create or replace function showmej() returns trigger
language plpgsql as $$ declare j json; begin j := to_json(old);
raise notice 'old x: %', j->>'x'; return new; end; $$;
CREATE FUNCTION
andrew=# create trigger show_x before update on blurfl for each row
execute procedure showmej();
CREATE TRIGGER
andrew=# update blurfl set id = id where id = 1;
NOTICE: old x: <NULL>
UPDATE 1
andrew=# update blurfl set id = id where id = 1;
NOTICE: old x: 100
UPDATE 1
andrew=#
The error is fixed with this patch:
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index 2436692..f34a72a 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -3396,7 +3396,11 @@ ltrmark:;
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
}
- result = heap_copytuple(&tuple);
+ if (HeapTupleHeaderGetNatts(tuple.t_data) < relation->rd_att->natts)
+ result = heap_expand_tuple(&tuple, relation->rd_att);
+ else
+ result = heap_copytuple(&tuple);
+
ReleaseBuffer(buffer);
return result;
I'm going to re-check the various places that this might have been
missed. I guess it belongs on the open items list.
cheers
andrew
--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2018-09-18 20:34:36 | Re: Collation versioning |
Previous Message | Fabien COELHO | 2018-09-18 19:07:34 | Re: pgbench - add pseudo-random permutation function |