Thread: Replace into...?

Replace into...?

From
"Diehl, Jeffrey"
Date:
I'm in the process of migrating a database and application suite from mysql
to postgresql.  The problem is that I've used
mysql's "replace into..." quite frequently...

Does anyone know of a "clean" way to implement this feature in postgresql?
I really don't want my applications to have to know what indexes are in
place for a given table.

Thanx in advance,
Mike Diehl,
Network Monitoring Tool Devl.
284-3137
jdiehl@sandia.gov



Re: Replace into...?

From
Peter Eisentraut
Date:
Diehl, Jeffrey writes:

> I'm in the process of migrating a database and application suite from mysql
> to postgresql.  The problem is that I've used
> mysql's "replace into..." quite frequently...

begin transaction;
update ...
<if zero rows> insert ...
<endif>
commit;

or some permutation thereof.  If you need to do a lot of this, writing a
PL/pgSQL function might be worthwhile.

-- 
Peter Eisentraut      peter_e@gmx.net       http://yi.org/peter-e/



Re: Replace into...?

From
Tom Lane
Date:
"Diehl, Jeffrey" <jdiehl@sandia.gov> writes:
> I'm in the process of migrating a database and application suite from mysql
> to postgresql.  The problem is that I've used
> mysql's "replace into..." quite frequently...

> Does anyone know of a "clean" way to implement this feature in postgresql?
> I really don't want my applications to have to know what indexes are in
> place for a given table.

I'm confused.  What does "replace into" have to do with having to know
what indexes are in place?
        regards, tom lane


RE: Replace into...?

From
"Diehl, Jeffrey"
Date:
Replace into does an insert by default.  If however, there is already a
record which would cause a unique index collision, then mysql does an update
on that record.  I want to prevent my application from having to do all of
that bookkeeping.

Peter Eisentraut has suggested:
begin transaction;
update ...
<if zero rows> insert ...
<endif>
commit;

This seems like a good way to go.  He suggested that I write a PL/pgSQL
function to do the work.  I really don't have time to climb the learning
curve on this so I might just write a perl module to do it, and a few other
things, for me.

Thanx for your help.

If there is AN EVEN EASIER way, please let me know.

Mike Diehl,
Network Monitoring Tool Devl.
284-3137
jdiehl@sandia.gov



> -----Original Message-----
> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> Sent: March 27, 2001 1:04 PM
> To: Diehl, Jeffrey
> Cc: pgsql-sql@postgresql.org
> Subject: Re: [SQL] Replace into...?
> 
> 
> "Diehl, Jeffrey" <jdiehl@sandia.gov> writes:
> > I'm in the process of migrating a database and application 
> suite from mysql
> > to postgresql.  The problem is that I've used
> > mysql's "replace into..." quite frequently...
> 
> > Does anyone know of a "clean" way to implement this feature 
> in postgresql?
> > I really don't want my applications to have to know what 
> indexes are in
> > place for a given table.
> 
> I'm confused.  What does "replace into" have to do with having to know
> what indexes are in place?
> 
>             regards, tom lane
>