BUG #5302: WIN1252 encoding causes server memory leak

Started by Florian Nigschabout 16 years ago4 messagesbugs
Jump to latest
#1Florian Nigsch
contact@flo.nigsch.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Florian Nigsch (#1)
Re: BUG #5302: WIN1252 encoding causes server memory leak

"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

#3Florian Nigsch
flo@nigsch.eu
In reply to: Tom Lane (#2)
Re: BUG #5302: WIN1252 encoding causes server memory leak

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

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Florian Nigsch (#1)
Re: BUG #5302: WIN1252 encoding causes server memory leak

"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