diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2020-03-09 09:22:22 +0100 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2020-03-09 09:34:55 +0100 |
commit | 71d60e2aa05157efec28393b15c0b0b9fc1b210c (patch) | |
tree | 535e192f42bee56fb4978b003cbd22e099ea2f46 /doc/src | |
parent | 8f152b6c50c764d4c300e73a535da88cd1b18fa5 (diff) | |
download | postgresql-71d60e2aa05157efec28393b15c0b0b9fc1b210c.tar.gz postgresql-71d60e2aa05157efec28393b15c0b0b9fc1b210c.zip |
Add tg_updatedcols to TriggerData
This allows a trigger function to determine for an UPDATE trigger
which columns were actually updated. This allows some optimizations
in generic trigger functions such as lo_manage and
tsvector_update_trigger.
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Discussion: https://www.postgresql.org/message-id/flat/11c5f156-67a9-0fb5-8200-2a8018eb2e0c@2ndquadrant.com
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/trigger.sgml | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/doc/src/sgml/trigger.sgml b/doc/src/sgml/trigger.sgml index 6f323a903b5..7d9ad4763aa 100644 --- a/doc/src/sgml/trigger.sgml +++ b/doc/src/sgml/trigger.sgml @@ -517,6 +517,7 @@ typedef struct TriggerData TupleTableSlot *tg_newslot; Tuplestorestate *tg_oldtable; Tuplestorestate *tg_newtable; + const Bitmapset *tg_updatedcols; } TriggerData; </programlisting> @@ -759,6 +760,30 @@ typedef struct Trigger </listitem> </varlistentry> + <varlistentry> + <term><structfield>tg_updatedcols</structfield></term> + <listitem> + <para> + For <literal>UPDATE</literal> triggers, a bitmap set indicating the + columns that were updated by the triggering command. Generic trigger + functions can use this to optimize actions by not having to deal with + columns that were not changed. + </para> + + <para> + As an example, to determine whether a column with attribute number + <varname>attnum</varname> (1-based) is a member of this bitmap set, + call <literal>bms_is_member(attnum - + FirstLowInvalidHeapAttributeNumber, + trigdata->tg_updatedcols))</literal>. + </para> + + <para> + For triggers other than <literal>UPDATE</literal> triggers, this will + be <symbol>NULL</symbol>. + </para> + </listitem> + </varlistentry> </variablelist> </para> |