how to determine OID of the row I just inserted??? - Mailing list pgsql-general

From Jules Alberts
Subject how to determine OID of the row I just inserted???
Date
Msg-id 20030206140855.A06E21CB1D9@koshin.dsl.systemec.nl
Whole thread Raw
Responses Re: how to determine OID of the row I just inserted???  ("Nigel J. Andrews" <nandrews@investsystems.co.uk>)
Re: how to determine OID of the row I just inserted???  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: how to determine OID of the row I just inserted???  (Dennis Gearon <gearond@cvc.net>)
List pgsql-general
Hello everybody,

Here's a question I have asked some time ago and Google tells me I'm
not the only one with this problem, but I haven't found a solution yet
:-(. I have a setup like this:

    customer {id serial, name varchar, address bigint}
    person   {id serial, name varchar, address bigint}
    address  {id serial, street varchar}

    customer.address points to address.id
    person.address points to address.id

So, addresses are stored in a seperate table, customer.address and
person.address should have a value that exists in address.id. When I
add an address for customer X, I must do something like:

    insert into address (street) values ('Penny Lane');
    update customer set address = ??? where name = 'X';

If I would do this in pgsql there would be no problem, because the OID
is echoed when the update succeeds. But I use PHP or pl/pgsql (others
have exactly the same problem with JDBC) and I know of no way to solve
this. Something like lastval() IMHO is way too risky. I need something
like a return value:

    catchOID = returnQueryOID('insert into address (street)
        values ('Penny Lane'));
    update customer set address = 'select id from address where
        oid = catchOID' where name = 'X';

Sorry for any syntax errors in my examples (it's half semi code), I
hope you understand the problem. If somebody knows a good solution, IMO
this would be something to put in a FAQ, because exactly the same
question arises when you do an insert on a table where the primary key
is generated automatically and you want to show the result after the
row is updated (which is very common).

TIA for any help, I really need a solution...

pgsql-general by date:

Previous
From: "Nigel J. Andrews"
Date:
Subject: Re: start error - pgsql
Next
From: Greg Stark
Date:
Subject: Re: not exactly a bug report, but surprising behaviour