Re: Need to understand PL/PGSQL, Foreign Key Deferable,

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: "D(dot) Dante Lorenso" <dante(at)lorenso(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Need to understand PL/PGSQL, Foreign Key Deferable,
Date: 2003-12-17 17:27:26
Message-ID: 20031217091545.U58631@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, 17 Dec 2003, D. Dante Lorenso wrote:

> I just wrote a PL/PGSQL function that is working, but I don't know
> why it is...
>
> I have a foreign key constraint defined on:
>
> transaction.invoice_id --> invoice.invoice_id
>
> But I did NOT state that it was DEFERRABLE. In this PL/PGSQL
> function below, I update the transaction values and set them
> to the invoice_id that does not yet exist in the invoice table.
>
> I later add the invoice record, so technically at the end of the
> PL/PGSQL function, the constraint is satisfied. So, what's the
> deal? The foreign key checks are not done until AFTER the
> function exits? If this is true, should I rely on this to exist
> into the future as well or do I need to design my function
> differently?

Right now, this is true, because the triggers run at "outer" statement end
(ie the statement that called the function). I wouldn't want to bet on
it possibly not changing in the future (the spec is difficult enough to
read on these issues that we may find out we're doing it wrong).

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Christopher Murtagh 2003-12-17 17:31:38 Re: restore error - language "plperlu" is not trusted
Previous Message Tim McAuley 2003-12-17 17:27:09 Deadlocks with plpgsql