Re: Referential Integrity

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Alexander Stanier" <alexander(dot)stanier(at)egsgroup(dot)com>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: Referential Integrity
Date: 2003-02-10 15:09:52
Message-ID: 5191.1044889792@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-sql

"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.

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Stephan Szabo 2003-02-10 15:54:56 Re: Referential Integrity
Previous Message Tom Lane 2003-02-10 15:01:39 Re: Trigger function not executing

Browse pgsql-sql by date

  From Date Subject
Next Message Stephan Szabo 2003-02-10 15:54:56 Re: Referential Integrity
Previous Message greg 2003-02-10 14:44:10 Re: How to delete duplicate record