Hi. I have problem with Postgres. I have perl script, that add 2 records in 2 tables. This script I run from web throught web server Apache (on FreeBSD). (perl version 5.005)
Tables structure: create table object_list ( obj_id serial primary key, obj_name varchar(100) ); create table texts ( obj_id int4, text_title varchar(100), text_content oid ); Algorithm: 1. Put one record in table object_list. 2. Get last id record from table object_list. 3. Put one record in table texts, where obj_id field is id from 2 step. Problem: Sometimes, I get next result - in table object_list inserting 2 record and in table texts inserting 1 record. What is happened? Thanks for listening! Best Regards, Andrey. Script code: #!/usr/bin/perl use DBI; use DBD::Pg; $dbh = DBI->connect("dbi:Pg:dbname=triz;host=localhost;port=6565","postgres","" , {PrintError=>1, RaiseError=>1, AutoCommit=>0}); if (!$dbh) { print ("Error: $DBI::errstr\n"); exit } $obj_name = 'object_name'; $text_title = 'text_title'; $text_content = 'text_content'; create_text ($obj_name, $text_title, $text_content); $dbh->commit; $dbh->disconnect; sub create_text { my ($obj_name, $text_title, $text_content) = @_; my ($obj_id); my $tempdir = '/tmp/'; eval { $sth = $dbh->prepare("insert into object_list (obj_name) values (?)"); $sth->execute($obj_name); $sth = $dbh->prepare("select max(obj_id) from object_list"); $sth->execute(); $max = $sth->fetchrow; if($max>0) { $obj_id=$max; } else { $dbh->rollback; exit; } $tempstr=$tempdir."text".$$.(time).".tmp"; open (TEMPF, ">".$tempstr); print TEMPF $config{'text_content'}; close (TEMPF); $sth=$dbh->prepare("insert into texts (obj_id, text_title, text_content) values ( ?, ?, lo_import('".$tempstr."'))"); $sth->execute($obj_id, $text_title); unlink $tempstr; $sth->finish; }; if ($@) { $dbh->rollback; exit; } } ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html