Retrieving the new "nextval" for primary keys....

Started by codeWarriorover 23 years ago4 messagesgeneral
Jump to latest
#1codeWarrior
GPatnude@adelphia.net

I am using postgreSQL with Perl::CGI and Perl::DBI::Pg... I would like to be
able to insert a row from my Perl script [$SQL->exec();] and have postgreSQL
return the id of the newly inserted record (new.id) directly to the Perl
script for further processing... Anyone with a solution / idea ???

Nearly EVERY table I create in postgreSQL (7.2) has the following minimum
structure:

create table "tblName" (

id int4 primary key nextval ("tblName_id_seq"),

..field...
..field...
..field...

create_dt date default 'CURRENT_DATE',
change_dt timestamptz default 'now()',
active_flag bool default 'TRUE'

)

#2Kevin Brannen
kevinb@nurseamerica.net
In reply to: codeWarrior (#1)
Re: [SQL] Retrieving the new "nextval" for primary keys....

Greg Patnude wrote:

I am using postgreSQL with Perl::CGI and Perl::DBI::Pg... I would like to be
able to insert a row from my Perl script [$SQL->exec();] and have postgreSQL
return the id of the newly inserted record (new.id) directly to the Perl
script for further processing... Anyone with a solution / idea ???

Nearly EVERY table I create in postgreSQL (7.2) has the following minimum
structure:

create table "tblName" (

id int4 primary key nextval ("tblName_id_seq"),

..field...
)

You can either do it in 2 statements, something like:

$dbh->do("insert into tblName ...");
my ($id) = $dbh->selectrow_array("select currval('tblName_id_seq')");

Or you could create a function which takes the insert statement, and
ends with doing a select on the currval (as above) and returning that.
As I do the 2 statement approach above, I haven't done a function, but
it doesn't look like it would be that hard to do.

HTH,
Kevin

#3friedrich nietzsche
nietzsche_psql@yahoo.it
In reply to: Kevin Brannen (#2)
Re: [SQL] Retrieving the new "nextval" for primary keys....

One solution seems to locking table(s),
but I prefer to leave it as last chance...
using table locks, and the trick of writing and
suddenly reading back from DB it probably works,
but it doesn't seems so sexy... :)
ciao
danilo

______________________________________________________________________
Yahoo! Musica: notizie, recensioni, classifiche, speciali multimediali
http://it.yahoo.com/mail_it/foot/?http://it.music.yahoo.com/

#4GB Clark
postgres@vsservices.com
In reply to: friedrich nietzsche (#3)
Re: [SQL] Retrieving the new "nextval" for primary keys....

On Wed, 28 Aug 2002 18:36:10 +0200 (CEST)
friedrich nietzsche <nietzsche_psql@yahoo.it> wrote:

One solution seems to locking table(s),
but I prefer to leave it as last chance...
using table locks, and the trick of writing and
suddenly reading back from DB it probably works,
but it doesn't seems so sexy... :)
ciao
danilo

Why would you have to lock the table? currval() is connection safe.

I would either do the insert and then do a currval() OR do a nextval()
and do the insert. Either one would work. I always just do the insert
and then call currval() to get the current serial number for the connection.

GB

--
GB Clark II | Roaming FreeBSD Admin
gclarkii@VSServices.COM | General Geek
CTHULU for President - Why choose the lesser of two evils?