pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Thies C. Arntzen <thies@thieso.net>
To: Bruce Momjian <pgman@candle.pha.pa.us>
Cc: Thies C. Arntzen <thies@digicol.de>
Cc: Rasmus@candle.pha.pa.us, Lerdorf <rasmus@php.net>
Cc: PostgreSQL-interfaces <pgsql-interfaces@postgresql.org>
Cc: php-dev@lists.php.net
Subject: Re: PostgreSQL and PHP persistent connections
Date: Wed, 7 Feb 2001 20:56:12 +0100
Message-ID: <20010207205611.A11560@schnuffel.thieso.net> (raw)
In-Reply-To: <200102071912.OAA27530@candle.pha.pa.us>
References: <200102071912.OAA27530@candle.pha.pa.us>

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
    



view thread (17+ messages)  latest in thread

Message-ID: <20010207205611.A11560@schnuffel.thieso.net>
Permalink:  ../20010207205611.A11560@schnuffel.thieso.net/
Also on:    postgresql.org/message-id/20010207205611.A11560@schnuffel.thieso.net

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: thies@thieso.net, pgman@candle.pha.pa.us, thies@digicol.de, rasmus@php.net, php-dev@lists.php.net
  Subject: Re: PostgreSQL and PHP persistent connections
  In-Reply-To: <20010207205611.A11560@schnuffel.thieso.net>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox