Received: from candle.pha.pa.us (candle.navpoint.com [162.33.245.46]) by mail.postgresql.org (8.11.3/8.11.1) with ESMTP id f2JM1jN57277; Mon, 19 Mar 2001 17:01:45 -0500 (EST) (envelope-from pgman@candle.pha.pa.us) Received: (from pgman@localhost) by candle.pha.pa.us (8.9.0/8.9.0) id RAA05090; Mon, 19 Mar 2001 17:01:26 -0500 (EST) From: Bruce Momjian Message-Id: <200103192201.RAA05090@candle.pha.pa.us> Subject: Re: PostgreSQL and PHP persistent connections In-Reply-To: <5.0.2.1.0.20010207214024.009ee160@mail.retep.org.uk> "from Peter Mount at Feb 7, 2001 09:41:43 pm" To: Peter Mount Date: Mon, 19 Mar 2001 17:01:26 -0500 (EST) CC: "Thies C. Arntzen" , pgsql-jdbc@postgresql.org, PostgreSQL-interfaces X-Mailer: ELM [version 2.4ME+ PL77 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Archive-Number: 200103/146 X-Sequence-Number: 1307 > At 14:12 07/02/01 -0500, Bruce Momjian wrote: > >Thies, we talked at LinuxWorld about improving the reliability of > >persistent PostgreSQL connections in PHP. > > > >I believe the problem is that persistent connections sometime do not > >pass clean sessions because of open transactions and SET changes to the > >session. > > > >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. > > > >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. > > Some Java apps utilise connection pools so they would possibly benefit. I > could add the BEGIN WORK;ROLLBACK; to JDBC. I don't think that belongs in jdbc. It is the connection pooling code that should execute those statements before passing over a new connection. No reason to have it for all jdbc users. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026