BUG #5302: WIN1252 encoding causes server memory leak
The following bug has been logged online:
Bug reference: 5302
Logged by: Florian Nigsch
Email address: contact@flo.nigsch.com
PostgreSQL version: 8.4.2
Operating system: x86_64 GNU/Linux 2.6.18-92.el5
Description: WIN1252 encoding causes server memory leak
Details:
The following rapidly consumes server memory:
-- Causes leak:
SET client_encoding TO 'WIN1252';
BEGIN;
CREATE TEMP TABLE t1(pk INT PRIMARY KEY);
-- Repeat 1000 times
DECLARE mycur CURSOR WITH HOLD FOR SELECT * FROM t1;
FETCH 100 IN mycur;
SAVEPOINT mysp;
CLOSE mycur;
RELEASE mysp;
-- End repeat
COMMIT:
Tested on 8.4.0 and 8.4.2. The above code is analogous to that produced by
the PSQLODBC driver.
The leak does not occur without the WIN1252 encoding setting.
http://pgfoundry.org/tracker/index.php?func=detail&aid=1010758&group_id=1000
125&atid=538
"Florian Nigsch" <contact@flo.nigsch.com> writes:
Description: WIN1252 encoding causes server memory leak
Hmm, what server-side encoding and locale are you using?
regards, tom lane
Output of 'psql -l':
The 8.4.0 server:
List of databases
Name | Owner | Encoding | Collation | Ctype |
Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
******** | ******** | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
:
postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
:
postgres=CTc/postgres
psql client used on the 8.4.0 server:
~$ psql --version
psql (PostgreSQL) 8.4.0
And the 8.4.2 server:
List of databases
Name | Owner | Encoding | Collation | Ctype | Access
privileges
-----------+----------+----------+-----------+------------+-----------------------
******** | ******** | UTF8 | C | en_US.utf8 |
postgres | postgres | UTF8 | C | en_US.utf8 |
template0 | postgres | UTF8 | C | en_US.utf8 | =c/postgres
:
postgres=CTc/postgres
template1 | postgres | UTF8 | C | en_US.utf8 |
postgres=CTc/postgres
: =c/postgres
psql client used on the 8.4.2 server:
~$ psql --version
psql (PostgreSQL) 8.4.2
Cheers,
Flo
Quoting Tom Lane <tgl@sss.pgh.pa.us>:
Show quoted text
"Florian Nigsch" <contact@flo.nigsch.com> writes:
Description: WIN1252 encoding causes server memory leak
Hmm, what server-side encoding and locale are you using?
regards, tom lane
"Florian Nigsch" <contact@flo.nigsch.com> writes:
The following rapidly consumes server memory:
-- Causes leak:
SET client_encoding TO 'WIN1252';
BEGIN;
CREATE TEMP TABLE t1(pk INT PRIMARY KEY);
-- Repeat 1000 times
DECLARE mycur CURSOR WITH HOLD FOR SELECT * FROM t1;
FETCH 100 IN mycur;
SAVEPOINT mysp;
CLOSE mycur;
RELEASE mysp;
-- End repeat
I've applied a patch for this, but I have to say that using a SAVEPOINT
around a CLOSE is an awfully expensive use of a savepoint. You might
want to nag the psqlodbc people to see if they can't avoid that.
regards, tom lane