From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Foreign key referential actions |
Date: | 2001-11-22 02:28:02 |
Message-ID: | 200111220228.fAM2S2W04268@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Are there any TODO items here?
---------------------------------------------------------------------------
>
> Right now, referential actions get deferred along with normal
> checks and run against the state of the database at that time.
> I think this violates SQL92 11.8 General Rules 4-6 and have some
> reasoning and proposed ideas towards making it more complient
> although I don't actually have an implementation in mind for
> the most correct version. :(
>
> Here are my interpretations:
>
> GR 4 says that the matching rows (unique and non-unique)
> are determined immediately before the execution of an SQL
> statement. We can ignore the fluff about non-unique matching
> rows for now because I believe that applies to match partial only.
> GR 5 says when there's a delete rule and a row of the
> referenced table is marked for deletion (if it's not already
> marked such) then do something based on the action, for example
> mark matching rows for deletion if it is cascade. This seems
> to imply the action is supposed to occur immediately, since
> AFAICS the rows aren't marked for deletion on the commit but
> rather on the delete itself.
> GR 6 seems to be pretty much the same for update.
>
> I think the correct course of action would be if I'm right:
> *Make referential actions (other than no action) not deferrable
> and thus initially immediate. This means that you see the
> cascaded (or nulled or defaulted) results immediately, but
> I think that satisfies GRs 5 and 6. It also makes the
> problems of what we can see a little less problematic, but
> doesn't quite cure them.
> *To fix the visibility issues I think we'd need to be able to
> see what rows matched immediately before the statement and
> then reference those rows later, even if the values that we're
> keying on have changed. I'm really not sure how we'd do
> this without a great deal of extra work.
> An intermediate step towards complience would probably
> be making sure the row existed before this statement
> (I think for the fk constraints this means if it was
> created by another statement or a command before this
> one) which is wrong if a row that matched before this
> statement was modified by this statement to a new value
> that we won't match. Most of these cases would be errors
> by sql anyway (I think these'd probably be real triggered
> data change violations) and would be wrong by our current
> implementation as well.
>
> I'm not sure that the intermediate step on the second is
> actually worthwhile over just waiting and trying to do it
> right, but if I'm right in what it takes, it's reasonably
> minimal.
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2001-11-22 02:28:44 | Re: More FK patches |
Previous Message | Serguei Mokhov | 2001-11-22 02:21:42 | Re: Mention NLS option in INSTALL |