#22761 [Com]: nextId does not create the sequence within transaction
| From: | blair at squiz dot net | Date: | Tue, 18 Mar 2003 22:23:11 +0000 |
| Subject: | #22761 [Com]: nextId does not create the sequence within transaction | ||
| References: | 1 | Groups: | php.pear.dev |
| Request: | Send a blank email to pear-dev+get-14421@lists.php.net to get a copy of this message | ||
ID: 22761
Comment by: blair at squiz dot net
Reported By: zubchenko at alarit dot com
Status: Open
Bug Type: PEAR related
Operating System: Linux
PHP Version: 4.3.0
New Comment:
This has to do with PostgreSQL's mannerism of abortting
a transaction when an error occurs and the error occurs
when the
SELECT NEXTVAL('[seqname]');
gets called because the sequence does not exist.
Then when the DB object attempts to create the sequence
you get this msg :
ERROR: current transaction is aborted, queries
ignored until end of transaction block
The only way I have found around this is to make DB::createSequence()
calls in my install script.
Anything else would mean making making a specific query for checking
for each PostgreSQL version and checking that the sequence existed
before calling it (I haven't found an easy way to check if a
table/sequence exists). This could also be a performance hit when doing
large data imports.
Previous Comments:
------------------------------------------------------------------------
[2003-03-18 06:38:17] zubchenko at alarit dot com
We are using PostrgreSQL 7.3 with PHP 4.2.3 in our project. We have
discovered that when calling nextId with name of non-existent sequence
we get NULL as result without any error. In pgAdmin all is fine. It
happens only within transaction. Here is example of code:
//opening connection to DB with DB class
$res = $db->query('BEGIN');
if (DB::isError($res)) {
die(trigger_error($res->getMessage() ." :
".$res->getUserInfo(),E_USER_ERROR));
}
debug($db->nextId('some_non_existing_seq'));
$res = $db->query('COMMIT');
if (DB::isError($res)) {
die(trigger_error($res->getMessage() ." :
".$res->getUserInfo(),E_USER_ERROR));
}
//closing connection
This code results in NULL output from debug and nothing else.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=22761&edit=1