Обсуждение: 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>:
> "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