pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Stephan Szabo <sszabo@megazone.bigpanda.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Rod Taylor <rbt@rbt.ca>
Cc: ow <oneway_111@yahoo.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: 7.4 - FK constraint performance
Date: Fri, 13 Feb 2004 07:49:59 -0800 (PST)
Message-ID: <20040213073852.K20792@megazone.bigpanda.com> (raw)
In-Reply-To: <2455.1076686047@sss.pgh.pa.us>
References: <20040213010341.95282.qmail@web60801.mail.yahoo.com>
	<25808.1076634636@sss.pgh.pa.us>
	<1076640825.10896.12.camel@jester>
	<27443.1076646336@sss.pgh.pa.us>
	<20040213065530.M19832@megazone.bigpanda.com>
	<2455.1076686047@sss.pgh.pa.us>

On Fri, 13 Feb 2004, Tom Lane wrote:

> Stephan Szabo <sszabo@megazone.bigpanda.com> writes:
> > One thing is that IIRC we're going to ask for only one row when we do the
> > SPI_execp_current.  However, unless I misremember, the behavior of for
> > update and limit means that saying limit 1 is potentially unsafe (if you
> > block on a row that goes away).  Is there anyway for us to let the planner
> > know this?
>
> I was looking at that last night.  It seems like we could add a LIMIT at
> least in some contexts.  In the case at hand, we're just going to error
> out immediately if we find a matching row, and so there's no need for
> FOR UPDATE, is there?

I think there still is, because a not yet committed transaction could have
deleted them all in which case I think the correct behavior is to wait and
if that transaction commits allow the action and if it rolls back to
error.

Really we'd want a different behavior where we're only blocking in these
cases if all the matching rows are locked by other transactions.

> However, I'm not sure it would help the OP anyway.  With the stats he
> had, the planner would still take a seqscan, because it's going to
> expect that it can find a match by probing the first ten or so rows of
> the first page.  With anything close to the normal cost parameters,
> that's going to look more expensive than an index probe.  Possibly if
> the table had a few more values it would work.

Hmm, that's true. It also doesn't help the real actions (cascade, set *)
since those really do need to get at all the rows, but it probably helps
in a reasonable number of cases.



view thread (29+ messages)  latest in thread

Message-ID: <20040213073852.K20792@megazone.bigpanda.com>
Permalink:  ../20040213073852.K20792@megazone.bigpanda.com/
Also on:    postgresql.org/message-id/20040213073852.K20792@megazone.bigpanda.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: sszabo@megazone.bigpanda.com, tgl@sss.pgh.pa.us, rbt@rbt.ca, oneway_111@yahoo.com
  Subject: Re: 7.4 - FK constraint performance
  In-Reply-To: <20040213073852.K20792@megazone.bigpanda.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox