question about postgres persistent connection in php

question about postgres persistent connection in php

am 29.03.2005 05:43:35 von Yulius Tjahjadi

Hi,

I have a question about the postgres interface in php. The
implementation for
a persistent connection calls _rollback_transactions. I was just
wondering
what exactly does the bottom section do by calling BEGIN; and then
ROLLBACK;.
It would seem like it's wasting cpu cycles to start up a transaction and
then rolling back the transactions doing nothing.

I'm looking at php 4.3.10 and I'm using postgres 8.0.1.

yulius

/* {{{ _rollback_transactions
*/
static int _rollback_transactions(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
PGconn *link;
PGresult *res;
int orig;

if (Z_TYPE_P(rsrc) !=3D le_plink)
return 0;

link =3D (PGconn *) rsrc->ptr;

if (PQ_SETNONBLOCKING(link, 0)) {
php_error_docref("ref.pgsql" TSRMLS_CC, E_NOTICE,
"Cannot set connection to blocking mode");
return -1;
}

while ((res =3D PQgetResult(link))) {
PQclear(res);
}
orig =3D PGG(ignore_notices);
PGG(ignore_notices) =3D 1;
res =3D PQexec(link,"BEGIN;");
PQclear(res);
res =3D PQexec(link,"ROLLBACK;");
PQclear(res);
PGG(ignore_notices) =3D orig;

return 0;
}
/* }}} */

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

Re: question about postgres persistent connection in php

am 29.03.2005 09:05:01 von Christopher Kings-Lynne

> A majority of our sql statements in the logs are BEGIN; ROLLBACK;
> that is created by the php persistent connection and I want to
> see if I can get rid of them.

Try changing these lines:

orig = PGG(ignore_notices);
PGG(ignore_notices) = 1;
res = PQexec(link,"BEGIN;");
PQclear(res);
res = PQexec(link,"ROLLBACK;");
PQclear(res);
PGG(ignore_notices) = orig;

to this:

if ((PQprotocolVersion(link) >= 3 && PQtransactionStatus(link)
!= PQTRANS_IDLE) || PQprotocolVersion(link) < 3)
{
orig = PGG(ignore_notices);
PGG(ignore_notices) = 1;
res = PQexec(link,"ROLLBACK;");
PQclear(res);
PGG(ignore_notices) = orig;
}

And recompile.

Chris

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
joining column's datatypes do not match