Geoff Winkless, Stephen Frost, Peter Geoghegan and me.
<para>
<literal>ON CONFLICT</> can be used to specify an alternative
action to raising a unique constraint or exclusion constraint
- violation error . (See <xref linkend="sql-on-conflict"
+ violation error. (See <xref linkend="sql-on-conflict"
endterm="sql-on-conflict-title"> below.)
</para>
<emphasis>unique index inference</emphasis> clause or an explicitly
named constraint can be used. For <literal>ON CONFLICT DO
NOTHING</literal>, it is optional to specify a
- <parameter>conflict_target</parameter>; when ommitted, conflicts
+ <parameter>conflict_target</parameter>; when omitted, conflicts
with all usable constraints (and unique indexes) are handled. For
<literal>ON CONFLICT DO UPDATE</literal>, a conflict target
<emphasis>must</emphasis> be specified.
* Speculatively inserted tuples behave as "value locks" of short duration,
* used to implement INSERT .. ON CONFLICT.
*
- * Note that these options will be applied when inserting into the heap's
- * TOAST table, too, if the tuple requires any out-of-line data.
- * FIXME: Do we mark TOAST tuples as speculative too? What about confirming
- * or aborting them?
+ * Note that most of these options will be applied when inserting into the
+ * heap's TOAST table, too, if the tuple requires any out-of-line data. Only
+ * HEAP_INSERT_IS_SPECULATIVE is explicitly ignored, as the toast data does
+ * not partake in speculative insertion.
*
* The BulkInsertState object (if any; bistate can be NULL for default
* behavior) is also just passed through to RelationGetBufferForTuple.
static int MyTriggerDepth = 0;
/*
- * Note that similar macros also exists in executor/execMain.c. There does not
- * appear to be any good header to put it into, given the structures that it
- * uses, so we let them be duplicated. Be sure to update both if one needs to
- * be changed, however.
+ * Note that similar macros also exist in executor/execMain.c. There does not
+ * appear to be any good header to put them into, given the structures that
+ * they use, so we let them be duplicated. Be sure to update all if one needs
+ * to be changed, however.
*/
#define GetUpdatedColumns(relinfo, estate) \
(rt_fetch((relinfo)->ri_RangeTableIndex, (estate)->es_range_table)->updatedCols)
List *mt_arbiterindexes; /* unique index OIDs to arbitrate taking alt path */
TupleTableSlot *mt_existing; /* slot to store existing target tuple in */
List *mt_excludedtlist; /* the excluded pseudo relation's tlist */
- TupleTableSlot *mt_conflproj; /* FIXME*/
+ TupleTableSlot *mt_conflproj; /* CONFLICT ... SET ... projection target */
} ModifyTableState;
/* ----------------