Neil Conway wrote:
On Fri, 2003-01-10 at 18:17, Ashley Cambrell wrote:
  
The problem with getting rid of OIDs as default is there is then no way
to get the primary key of a just inserted row with out OIDs (as far as I
know)
    

Use currval() on the PK sequence -- if you call it from within the query
that inserted a row, it is guaranteed to give you the last sequence
value that it generated.
  

First problem though is that you have to know the sequence name that is autogenerated from the serial

secondly, I thought that sequences worked outside of transactions..

process 1

INSERT INTO testtable(text1) VALUES('blah1');  -- testid_seq now 1

process 2

INSERT INTO testtable(text1) VALUES('blah2'); -- testid_seq now 2
SELECT currval('testid_seq'); --  returns 2

process 1
SELECT currval('testid_seq'); --  returns 2

??

However, I agree that one of the drawbacks of this scheme would be
breaking the OID in the status string returned by INSERT and similar
commands. Not too big a deal, IMHO (users can still get the same effect
by specifying WITH OIDS, or toggling the GUC var)...
  
The users who don't know any better and expect that pg_getlastoid should return the last oid will have trouble.  There really should be alternative first, like binding variables and RETURNING INTO.  Is it on the TODO list by any chance? 
Cheers,

Neil
  
Ashley Cambrell

Reply via email to