INSERT WHERE NOT EXISTS - Mailing list pgsql-general

From Reuben D. Budiardja
Subject INSERT WHERE NOT EXISTS
Date
Msg-id 200306251406.57666.techlist@voyager.phys.utk.edu
Whole thread Raw
Responses Re: INSERT WHERE NOT EXISTS  ("scott.marlowe" <scott.marlowe@ihs.com>)
Re: INSERT WHERE NOT EXISTS  (Ian Barwick <barwick@gmx.net>)
Re: INSERT WHERE NOT EXISTS  (Karsten Hilbert <Karsten.Hilbert@gmx.net>)
List pgsql-general
Hi,
I am developing application with PHP as the front end, PGSQL as the backend. I
am trying to figure out what's the best way to do this.
I want to check if an entry already exists in the table. If it does, then I
will do
UPDATE tablename ....

otherwise, I will do
INSER INTO tablename...

What's the best way to do that? I can of course check first, and then put the
login in PHP code, eg:

// check if entry already exists
SELECT COUNT(*) FROM tablename WHERE [cond]
..
if($count >0)
  UPDATE
else
  INSERT

but this will double the hit to the database server, because for every
operation I need to do SELECT COUNT(*) first. The data itself is not a lot,
and the condition is not complex, but the hitting frequency is a lot.

I vaguely remember in Oracle, there is something like this:

INSERT INTO mytable
SELECT 'value1', 'value2'
    FROM dummy_table
  WHERE NOT EXISTS
        (SELECT NULL FROM mytable
                WHERE mycondition)

This query will do INSERT, if there is not an entry already in the TABLE
mytable that match the condition mycondition. Otherwise, the INSERT just
fails and return 0 (without returning error), so I can check on that and do
update instead.

This is especially useful in my case because about most of the time the INSERT
will succeed, and thus will reduce the hit frequency to the DB server from
PHP by probably a factor of 1.5 or so.

Is there anything like that with PostgreSQL? I looked the docs and googled but
haven't found anything.

Anyhelp is greatly appreciated. Thanks.

RDB
--
Reuben D. Budiardja
Department of Physics and Astronomy
The University of Tennessee, Knoxville, TN
-------------------------------------------------
/"\  ASCII Ribbon Campaign against HTML
\ /  email and proprietary format
 X   attachments.
/ \
-------------------------------------------------
Have you been used by Microsoft today?
Choose your life. Choose freedom.
Choose LINUX.
-------------------------------------------------


pgsql-general by date:

Previous
From: Carlos
Date:
Subject: Re: Eliminating start error message: "unary operator
Next
From: "scott.marlowe"
Date:
Subject: Re: INSERT WHERE NOT EXISTS