Re: What is the postgres version of mysql's "ON DUPLICATE KEY"

From: Pierre-Frédéric Caillaud <lists(at)boutiquenumerique(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: What is the postgres version of mysql's "ON DUPLICATE KEY"
Date: 2004-09-11 12:13:37
Message-ID: opsd5v8zw0cq72hf@musicbox
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


> There is no "between" a single statement.

Yes, I know, even if the statement involves mutiple subqueries...

I meant :
The OP wants to UPDATE if the row already exists, and to INSERT otherwise
; we have the INSERT bit here, but to UPDATE he needs to check if the
insert really took place, and if not, issue an UPDATE statement.. so that
makes it two statements.

By the way, do several consecutive queries inside a plpgsql function
count as one statement (the function call) or as several statements (ie.
inside a function are transactions like SERIALIZED ?)

On Sat, 11 Sep 2004 13:56:26 +0200, Peter Eisentraut <peter_e(at)gmx(dot)net>
wrote:

> Pierre-Frédéric Caillaud wrote:
>> > INSERT INTO related_products (product_id,related_product_id)
>> > SELECT 1, 2 WHERE NOT EXISTS (SELECT 1
>> > FROM
>> > related_products
>> > WHERE
>> > product_id = 1 AND related_product_id = 2)
>>
>> Should not the SELECT be FOR UPDATE ?
>> because if no insert is done, the OP wanted to UPDATE the row, so it
>> should not be deleted by another transaction in-between...
>>
>> Can the above query fail if another transaction inserts a row
>> between the SELECT and the INSERT or postgres guarantee that this
>> won't happen ?
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message David Garamond 2004-09-11 13:16:27 Storing birthday data
Previous Message Peter Eisentraut 2004-09-11 11:56:26 Re: What is the postgres version of mysql's "ON DUPLICATE KEY"