pg.ddx.io  pgsql-docs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: PG Doc comments form <noreply@postgresql.org>
To: pgsql-docs@lists.postgresql.org
Cc: jack@jncsoftware.com
Subject: NOT DEFERRABLE constraints are checked before command finishes
Date: Tue, 13 Jul 2021 20:15:53 +0000
Message-ID: <162620735306.699.15544461247317554611@wrigleys.postgresql.org> (raw)

The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/13/sql-createtable.html
Description:

According to the docs:

A constraint that is not deferrable will be checked immediately after every
command.

But this is the behavior I observe on PG 13.3:

create table t (n int primary key);
insert into t values (1), (2), (3);
update t set n = n + 1;
ERROR:  23505: duplicate key value violates unique constraint "t_pkey"
DETAIL:  Key (n)=(2) already exists.

If the constraint was checked *after* the command it should work. It appears
it is checked before the command has finished.

In contrast a DEFERRABLE INITIALLY IMMEDIATE constraint which is documented
as "If the constraint is INITIALLY IMMEDIATE, it is checked after each
statement." behaves as expected.

create table t (n int primary key deferrable initially immediate);
insert into t values (1), (2), (3);
update t set n = n + 1; --> UPDATE 3


view thread (3+ messages)  latest in thread

Message-ID: <162620735306.699.15544461247317554611@wrigleys.postgresql.org>
Permalink:  ../162620735306.699.15544461247317554611@wrigleys.postgresql.org/
Also on:    postgresql.org/message-id/162620735306.699.15544461247317554611@wrigleys.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-docs@postgresql.org
  Cc: noreply@postgresql.org, pgsql-docs@lists.postgresql.org, jack@jncsoftware.com
  Subject: Re: NOT DEFERRABLE constraints are checked before command finishes
  In-Reply-To: <162620735306.699.15544461247317554611@wrigleys.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox