From: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Alexander Stanier <alexander(dot)stanier(at)egsgroup(dot)com>, <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: Referential Integrity |
Date: | 2003-02-10 15:54:56 |
Message-ID: | 20030210074318.C97908-100000@megazone23.bigpanda.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs pgsql-sql |
On Mon, 10 Feb 2003, Tom Lane wrote:
> "Alexander Stanier" <alexander(dot)stanier(at)egsgroup(dot)com> writes:
> > [ expected ON DELETE CASCADE doesn't seem to happen in this context: ]
>
> > CREATE FUNCTION test() RETURNS INT4 AS '
> > DECLARE
> > v_return INTEGER;
> > BEGIN
> > DELETE FROM alex
> > WHERE aid =3D ''1''
> > AND bid =3D ''1'';
>
> > INSERT INTO alex (aid,bid,itemdesc)
> > VALUES (''1'',''1'',''OneOne'');
>
> > INSERT INTO alexette (aid,bid,vcode)
> > VALUES (''1'',''1'',''V'');
>
> > RETURN 0;
> > END;
> > ' LANGUAGE 'plpgsql';
>
> The cascaded deletes will be implemented at end of statement --- which
> I believe is always taken to be the end of the current interactive
> statement, ie, the "SELECT test()" you typed. So they haven't happened
> yet at the time the function tries to do the inserts.
>
> This is probably a bug, but IIRC, it's not entirely obvious what to do
> instead. I seem to recall some inconclusive discussions in pgsql-hackers
> about designing a better rule for when to fire the RI actions. Check
> the list archives for details.
Yeah, I don't think we came to a conclusion. Looking at SQL99, the
"correct" behavior seems to be that the actions occur as part of the
actual delete or update action so that effectively at the "same" point in
time the dependant rows are changed, using (I think) 14.14 and 14.20 as a
guide. This is significantly different from what we do AFAICT though. :(
(For example, I'm not sure if 14.14 implies that after triggers from the
statement inside the function to occur as part of that statement rather
than after the function ends)
From | Date | Subject | |
---|---|---|---|
Next Message | Tim Burgess | 2003-02-10 18:51:13 | 'update' as action of 'insert' rule: permission denied |
Previous Message | Tom Lane | 2003-02-10 15:09:52 | Re: Referential Integrity |
From | Date | Subject | |
---|---|---|---|
Next Message | Alexander Stanier | 2003-02-10 16:09:39 | Re: Referential Integrity |
Previous Message | Tom Lane | 2003-02-10 15:09:52 | Re: Referential Integrity |