mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
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
This commit is contained in:
@ -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>
|
||||
|
||||
|
Reference in New Issue
Block a user