Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
SET CONSTRAINTS(7)	  PostgreSQL 18.6 Documentation       SET CONSTRAINTS(7)

NAME
     SET_CONSTRAINTS - set constraint check timing for the current transaction

SYNOPSIS
     SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

DESCRIPTION
     SET CONSTRAINTS sets the behavior of constraint checking within the current
     transaction.   IMMEDIATE  constraints are checked at the end of each state-
     ment.  DEFERRED constraints are not checked until transaction commit.  Each
     constraint has its own IMMEDIATE or DEFERRED mode.

     Upon  creation,  a  constraint  is  given one of three characteristics: DE-
     FERRABLE INITIALLY DEFERRED, DEFERRABLE INITIALLY	IMMEDIATE,  or	NOT  DE-
     FERRABLE.	The  third  class is always IMMEDIATE and is not affected by the
     SET CONSTRAINTS command. The first two classes start every  transaction  in
     the  indicated mode, but their behavior can be changed within a transaction
     by SET CONSTRAINTS.

     SET CONSTRAINTS with a list of constraint names changes the  mode	of  just
     those  constraints (which must all be deferrable). Each constraint name can
     be schema-qualified. The current schema search path is  used  to  find  the
     first  matching  name  if no schema name is specified.  SET CONSTRAINTS ALL
     changes the mode of all deferrable constraints.

     When SET CONSTRAINTS changes the mode of a constraint from DEFERRED to  IM-
     MEDIATE, the new mode takes effect retroactively: any outstanding data mod-
     ifications  that  would have been checked at the end of the transaction are
     instead checked during the execution of the SET CONSTRAINTS command. If any
     such constraint is violated, the SET CONSTRAINTS fails (and does not change
     the constraint mode). Thus, SET CONSTRAINTS can be used to  force	checking
     of constraints to occur at a specific point in a transaction.

     Currently,  only UNIQUE, PRIMARY KEY, REFERENCES (foreign key), and EXCLUDE
     constraints are affected by this setting.	NOT NULL and  CHECK  constraints
     are  always  checked immediately when a row is inserted or modified (not at
     the end of the statement). Uniqueness and exclusion constraints  that  have
     not been declared DEFERRABLE are also checked immediately.

     The  firing  of triggers that are declared as "constraint triggers" is also
     controlled by this setting -- they fire at the same time that  the  associ-
     ated constraint should be checked.

NOTES
     Because  PostgreSQL does not require constraint names to be unique within a
     schema (but only per-table), it is possible that there  is  more  than  one
     match  for  a  specified constraint name. In this case SET CONSTRAINTS will
     act on all matches. For  a  non-schema-qualified  name,  once  a  match  or
     matches  have been found in some schema in the search path, schemas appear-
     ing later in the path are not searched.

     This command only alters the behavior of  constraints  within  the  current
     transaction.  Issuing  this  outside of a transaction block emits a warning
     and otherwise has no effect.

COMPATIBILITY
     This command complies with the behavior defined in the SQL standard, except
     for the limitation that, in PostgreSQL, it does not apply to NOT  NULL  and
     CHECK  constraints.  Also, PostgreSQL checks non-deferrable uniqueness con-
     straints immediately, not at end of statement as the  standard  would  sug-
     gest.

PostgreSQL 18.6 		      2026		      SET CONSTRAINTS(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=SET_CONSTRAINTS&sektion=7&manpath=FreeBSD+Ports+15.1.quarterly>

home | help