From: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
---|---|
To: | Chris Dumoulin <chris(at)blaze(dot)io> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: select where not exists returning multiple rows? |
Date: | 2011-11-02 12:49:43 |
Message-ID: | CAHyXU0wsZ0U8ocUW6=nZN35KgDigobEFs=jxN1tfqPULExddHg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Wed, Nov 2, 2011 at 6:22 AM, Chris Dumoulin <chris(at)blaze(dot)io> wrote:
> We're using postgresql 9.1, and we've got a table that looks like this:
>
> testdb=# \d item
> Table "public.item"
> Column | Type | Modifiers
> -------+----------+-----------
> sig | bigint | not null
> type | smallint |
> data | text |
> Indexes:
> "item_pkey" PRIMARY KEY, btree (sig)
>
> And we're doing an insert like this:
> INSERT INTO Item (Sig, Type, Data) SELECT $1,$2,$3 WHERE NOT EXISTS ( SELECT
> NULL FROM Item WHERE Sig=$4)
>
> In this case $1 and $4 should always be the same. The idea is to insert if
> the row doesn't already exist.
> We're getting primary key constraint violations:
>
> 011-10-31 22:50:26 CDT STATEMENT: INSERT INTO Item (Sig, Type, Data) SELECT
> $1,$2,$3 WHERE NOT EXISTS ( SELECT NULL FROM Item WHERE Sig=$4 FOR UPDATE)
> 2011-10-31 22:52:56 CDT ERROR: duplicate key value violates unique
> constraint "item_pkey"
> 2011-10-31 22:52:56 CDT DETAIL: Key (sig)=(-4668668895560071572) already
> exists.
>
> I don't see how it's possible to get duplicate rows here, unless maybe the
> "select where not exists" is somehow returning multiple rows.
> Any ideas what's going on here?
race condition. lock the table first or retry the insert.
merlin
From | Date | Subject | |
---|---|---|---|
Next Message | Chris Dumoulin | 2011-11-02 13:05:02 | Re: select where not exists returning multiple rows? |
Previous Message | Chris Dumoulin | 2011-11-02 11:22:09 | select where not exists returning multiple rows? |