Re: Optimize referential integrity checks (todo item)

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Vik Reykja <vikreykja(at)gmail(dot)com>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Optimize referential integrity checks (todo item)
Date: 2012-08-27 18:09:21
Message-ID: 20120827180921.GR11088@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Any status on this?

---------------------------------------------------------------------------

On Mon, Feb 13, 2012 at 04:34:51PM +0100, Vik Reykja wrote:
> On Mon, Feb 13, 2012 at 15:25, Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
>
> On Sat, Feb 11, 2012 at 9:06 PM, Vik Reykja <vikreykja(at)gmail(dot)com> wrote:
> > I decided to take a crack at the todo item created from the following
> post:
> > http://archives.postgresql.org/pgsql-performance/2005-10/msg00458.php
> >
> > The attached patch makes the desired changes in both code and function
> > naming.
> >
> > It seemed quite easy to do but wasn't marked as easy on the todo, so I'm
> > wondering if I've missed something.
>
> It's kind of hard to say whether you've missed something, because you
> haven't really explained what problem this is solving; the thread you
> linked too isn't very clear about that either.  At first blush, it
> seems like you've renamed a bunch of stuff without making very much
> change to what actually happens.  Changing lots of copies of "equal"
> to "unchanged" doesn't seem to me to be accomplishing anything.
>
>
> It's very simple really, and most of it is indeed renaming the functions.  The
> "problem" this solves is that foreign key constraints are sometimes checked
> when they don't need to be.  See my example below.
>  
>
> > All regression tests pass.
>
> You should add some new ones showing how this patch improves the
> behavior relative to the previous code.  Or if you can't, then you
> should provide a complete, self-contained test case that a reviewer
> can use to see how your proposed changes improve things.
>
>
> I have no idea how a regression test would be able to see this change, so
> here's a test case that you can follow with the debugger.
>
> /* initial setup */
> create table a (x int, y int, primary key (x, y));
> create table b (x int, y int, z int, foreign key (x, y) references a);
> insert into a values (1, 2);
> insert into b values (1, null, 3);
>
> /* seeing the difference */
> update b set z=0;
>
> When that update is run, it will check if the FK (x, y) has changed to know if
> it needs to verify that the values are present in the other table.  The
> equality functions that do that don't consider two nulls to be equal (per sql
> logic) and so reverified the constraint.  Tom noticed that it didn't need to
> because it hadn't really changed.
>
> In the above example, the current code will recheck the constraint and the new
> code won't.  It's not really testing equality anymore (because null does not
> equal null), so I renamed them causing a lot of noise in the diff.
>  
>
> We're in the middle of a CommitFest right now,
>
>
> Yes, I wasn't expecting this to be committed, I just didn't want to lose track
> of it.
>  
>
> so please add this patch to the next one if you would like it reviewed:
>
> https://commitfest.postgresql.org/action/commitfest_view/open
>
>
> Will do.
>

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Alvaro Herrera 2012-08-27 18:31:59 Re: pg_upgrade's exec_prog() coding improvement
Previous Message Pavel Stehule 2012-08-27 17:50:19 Re: temporal support patch