Re: PostgreSQL and PHP persistent connections

From: "Thies C(dot) Arntzen" <thies(at)thieso(dot)net>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: "Thies C(dot) Arntzen" <thies(at)digicol(dot)de>, Rasmus(at)candle(dot)pha(dot)pa(dot)us, Lerdorf <rasmus(at)php(dot)net>, PostgreSQL-interfaces <pgsql-interfaces(at)postgresql(dot)org>, php-dev(at)lists(dot)php(dot)net
Subject: Re: PostgreSQL and PHP persistent connections
Date: 2001-02-07 19:56:12
Message-ID: 20010207205611.A11560@schnuffel.thieso.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces pgsql-jdbc

On Wed, Feb 07, 2001 at 02:12:26PM -0500, Bruce Momjian wrote:
> Thies, we talked at LinuxWorld about improving the reliability of
> persistent PostgreSQL connections in PHP.

cc'ing php-dev

bruce,
hope you had a successful show!

>
> I believe the problem is that persistent connections sometime do not
> pass clean sessions because of open transactions and SET changes to the
> session.

yep...

>
> We discussed using 'ROLLBACK' before passing a connection to a new user,
> but the problem was that ROLLBACK with no open transaction causes a
> server log error message. We discussed adding 'ROLLBACK SILENT' to fix
> this, but I believe a better, more portable solution is a simple "BEGIN
> WORK;ROLLBACK". This will do nothing if there is no open transaction,
> and will ROLLBACK any open transaction. I propose this be sent by PHP
> as the first query when passing persistent connections.

i'll have a look at that tomorrow (if my family allows;-). if
"BEGIN WORK;ROLLBACK" does not stack transactions i think you
might have found the solution to the php-postgres problem! do
you know how other script-interfaces (perl) to postgres
handle the very same thing?

>
> As far as SET changes, does anyone on the PostgreSQL interfaces list
> have a suggestion on how to RESET all session parameters? Seems we may
> need to add this feature in to the backend.

with the oracle driver (i wrote) there is a neat thing in the
oci-libs: you have a server-handle _and_ a session handle.
the session handle sits "on" the server-handle and keeps
_all_ session specific data, the server handle "only" carries
the pure connection to oracle. so i keep the server handle
persistent and allocate/free session handles on it for each
request to PHP. that way the sessions are always clean. but i
also do a forces rollback on the session handle before i free
it on request-end so that in case of a script error all
outstanding transactions are rolled-back.

regards,
tc

In response to

Responses

Browse pgsql-interfaces by date

  From Date Subject
Next Message Tom Lane 2001-02-07 20:49:21 Re: PostgreSQL and PHP persistent connections
Previous Message Tom Lane 2001-02-07 19:50:04 Re: pgAccess fails to launch on HPUX

Browse pgsql-jdbc by date

  From Date Subject
Next Message Tom Lane 2001-02-07 20:49:21 Re: PostgreSQL and PHP persistent connections
Previous Message Bruce Momjian 2001-02-07 19:12:26 PostgreSQL and PHP persistent connections