pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Aaron Bono <postgresql@aranya.com>
To: Mark Stosberg <mark@summersault.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Avoiding RI failure with INSERT ... SELECT FROM
Date: Wed, 12 Jul 2006 15:06:54 -0500
Message-ID: <bf05e51c0607121306u7aa28fa3hb4765f167fa229f5@mail.gmail.com> (raw)
In-Reply-To: <e92ulb$n0f$1@sea.gmane.org>
References: <e92ulb$n0f$1@sea.gmane.org>

On 7/12/06, Mark Stosberg <mark@summersault.com> wrote:
>
>
> Hello! I got an unexpected SQL failure last night, and want to see how
> to prevent it in the future. This is with 8.1.3.
>
> I have a couple of insert statements that run in a transaction block,
> initializing rows that will be used the next day:
>
> INSERT into item_hit_log
>     SELECT item_id, CURRENT_DATE + CAST('1 day' AS interval), 0
>          FROM items where item_state = 'available';
>
> INSERT into item_view_log
>          SELECT item_id, CURRENT_DATE + CAST('1 day' AS interval), 0
>              FROM items where item_state = 'available';


I would recommend you list your values in your insert statements:

INSERT into item_hit_log (
item_id_fk, ....
)
SELECT ....

That makes it less prone to problems in the future (like if the column
orders change) and makes it easier for others to understand and help you
with.

The "items" table has a few hundred thousand rows in it, so this takes a
> bit a run.
>
> The error we got last night was:
>
>    ERROR:  insert or update on table "item_hit_log" violates foreign key
> constraint "item_id_fk"
>    DETAIL:  Key (item_id)=(451226) is not present in table "items".
>
> Re-running the transaction block a few minutes later worked.
>
> What's an alternate design that avoids this possible error?


Does the items table allow deletes?  If so, your insert may be attempting to
do an insert for an item_id that was deleted after the select and before the
insert.  Don't know if PostgreSQL will prevent that with table locking or
not.


==================================================================
   Aaron Bono
   Aranya Software Technologies, Inc.
   http://www.aranya.com
==================================================================

view thread (2+ messages)

Message-ID: <bf05e51c0607121306u7aa28fa3hb4765f167fa229f5@mail.gmail.com>
Permalink:  ../bf05e51c0607121306u7aa28fa3hb4765f167fa229f5@mail.gmail.com/
Also on:    postgresql.org/message-id/bf05e51c0607121306u7aa28fa3hb4765f167fa229f5@mail.gmail.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: postgresql@aranya.com, mark@summersault.com
  Subject: Re: Avoiding RI failure with INSERT ... SELECT FROM
  In-Reply-To: <bf05e51c0607121306u7aa28fa3hb4765f167fa229f5@mail.gmail.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