Re: Fix disabled triggers with deferred constraints

Поиск
Список
Период
Сортировка
От Stephan Szabo
Тема Re: Fix disabled triggers with deferred constraints
Дата
Msg-id 20020812151907.H55884-100000@megazone23.bigpanda.com
обсуждение исходный текст
Ответ на Re: Fix disabled triggers with deferred constraints  (Neil Conway <nconway@klamath.dyndns.org>)
Ответы Re: Fix disabled triggers with deferred constraints  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Список pgsql-patches
On 7 Aug 2002, Neil Conway wrote:

> Tom Lane <tgl@sss.pgh.pa.us> writes:
> > Neil Conway <nconway@klamath.dyndns.org> writes:
> > > Elliot Lee <sopwith@redhat.com> writes:
> > > I remember looking at this issue and not doing anything because I
> > > couldn't decide whether the test for enabled status should occur when
> > > the trigger is queued or when it is executed --- or, perhaps, both?
> > > Is there anything in the standard about it?
>
> [...]
>
> > I think we're still waiting for someone to figure out what the behavior
> > should be per spec.
>
> I took a brief look at SQL99, but I couldn't find anything regarding
> this issue (AFAICS it doesn't mention "disabled triggers" at all). But
> given my prior track record for divining information from the
> standards, perhaps someone should double-check :-)
>
> I did notice some behavior which we don't implement AFAIK:
>
>         If the constraint mode is /deferred/, then the constraint is
>         effectively checked when the constraint mode is changed to
>         /immediate/ either explicitely by execution of a <set
>         constraints mode statement>, or implicitely at the end of the
>         current SQL-transaction.
>
> (SQL99, Section 4.17.1, paragraph 3)
>
> We don't recheck any outstanding deferred constraints when the
> constraint mode is explicitly switched back to IMMEDIATE, as the
> standard says we should.

(have been out since last wed, responding now)
Seems to work for me in some cases if I understand correctly.

sszabo=# create table iia(a int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 'iia_pkey'
for table 'iia'
CREATE TABLE
sszabo=# create table iib(a int constraint foo1 references iia(a)
deferrable initially deferred);
NOTICE:  CREATE TABLE will create implicit trigger(s) for FOREIGN KEY
check(s)
CREATE TABLE
sszabo=# begin;
BEGIN
sszabo=# insert into iib values (1);
INSERT 9678819 1
sszabo=# end;
ERROR:  foo1 referential integrity violation - key referenced from iib not
found in iia
sszabo=# begin;
BEGIN
sszabo=# insert into iib values (1);
INSERT 9678820 1
sszabo=# set constraints all immediate;
ERROR:  foo1 referential integrity violation - key referenced from iib not
found in iia


В списке pgsql-patches по дате отправления:

Предыдущее
От: "Ulrich Neumann"
Дата:
Сообщение: Re: Antw: Re: Patch for NetWare support
Следующее
От: Stephan Szabo
Дата:
Сообщение: Re: Fix disabled triggers with deferred constraints