Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28]) by mail.postgresql.org (8.11.1/8.11.1) with SMTP id f1CEiLx05734 for ; Mon, 12 Feb 2001 09:44:21 -0500 (EST) (envelope-from pgsql-interfaces-owner@postgresql.org) Received: from schnuffel.thieso.net (pD95000EF.dip.t-dialin.net [217.80.0.239]) by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f17Juix96113 for ; Wed, 7 Feb 2001 14:56:46 -0500 (EST) (envelope-from thies@thieso.net) Received: by schnuffel.thieso.net (Postfix, from userid 1000) id 4C491CFBA; Wed, 7 Feb 2001 20:56:12 +0100 (CET) Date: Wed, 7 Feb 2001 20:56:12 +0100 From: "Thies C. Arntzen" To: Bruce Momjian Cc: "Thies C. Arntzen" , Rasmus@candle.pha.pa.us, Lerdorf , PostgreSQL-interfaces , php-dev@lists.php.net Subject: Re: PostgreSQL and PHP persistent connections Message-ID: <20010207205611.A11560@schnuffel.thieso.net> References: <200102071912.OAA27530@candle.pha.pa.us> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <200102071912.OAA27530@candle.pha.pa.us>; from pgman@candle.pha.pa.us on Wed, Feb 07, 2001 at 02:12:26PM -0500 X-Archive-Number: 200102/92 X-Sequence-Number: 1045 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