bug dans postgresql 8.4 ou PDO (php-pdo) ?

From: ccastello <ccastello(at)athmo(dot)eu>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: bug dans postgresql 8.4 ou PDO (php-pdo) ?
Date: 2012-04-20 09:16:48
Message-ID: 1334913408.8204.22.camel@posteClaudeDev
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour à tous.

J'ai rencontré l'erreur "SQLSTATE[08006] [7] FATAL: limite de
connexions dépassée pour les utilisateurs standards" dans les conditions
particulières décrites ci-dessous avec PDO (php data objects).

Je cherche à identifier si le souci se situe côté POSTGRESQL ou côté PDO

En vous remerciant pour votre aide.

Le contexte :
+ serveur:
* PostgreSQL 8.4.11 on x86_64-pc-linux-gnu
* PHP 5.3.2 avec pdo_pgsql v8.4.9 module 1.0.2 revision pdo_pgsql.c
293036 2010-01-03 09:23:27Z sebastian
+ le cas se résume à celui-ci :
+ créer quelques bases "testN", N supérieur à "max_connections"
+ se connecter aux différentes bases, les unes après les autres mais
avec une erreur

Le problème : suite à l'erreur provoquée par l'absence de la table
désirée, aucune "déallocation" n'est effectuée. Du coup on atteint très
rapidement le nombre maximal de connexions autorisée.

Le script PHP permettant de reproduire le problème avec un nombre
maximum de connexions à 20, la table "toto" n'existant pas :
<?php
for ($i = 1; $i < 20; $i++) {
echo "$i : ";
try {
$user = 'usertest';
$password = 'usertest';
$dsn = "pgsql:dbname=test$i;host=localhost";
$c = new PDO ($dsn, $user, $password);
$c->query ('select * from toto;');
} catch (Exception $e) {
echo "Error! " . $e->getMessage () . PHP_EOL;
}

$c = NULL;
echo PHP_EOL;
}

Un extrait du journal de postgresql qui montre l'absence de désallocation :

2012-04-16 15:35:08.368 CEST 4954 4f8c200c.135a 1 2012-04-16
15:35:08 CEST 0 LOG 0 connexion re?ue : h?te=::1 port=33412
2012-04-16 15:35:08.383 CEST usertest test1 4954 ::1:33412 4f8c200c.135a
2 authentication 2012-04-16 15:35:08 CEST 0 LOG 0 connexion autoris?e :
utilisateur=usertest, base de donn?es=test1
2012-04-16 15:35:08.385 CEST usertest test1 4954 ::1:33412 4f8c200c.135a
3 PARSE 2012-04-16 15:35:08 CEST 2/8113 0 ERREUR 42P01 la relation «
toto » n'existe pas
2012-04-16 15:35:08.386 CEST 4955 4f8c200c.135b 1 2012-04-16
15:35:08 CEST 0 LOG 0 connexion re?ue : h?te=::1 port=33413
2012-04-16 15:35:08.400 CEST usertest test2 4955 ::1:33413 4f8c200c.135b
2 authentication 2012-04-16 15:35:08 CEST 0 LOG 0 connexion autoris?e :
utilisateur=usertest, base de donn?es=test2
2012-04-16 15:35:08.402 CEST usertest test2 4955 ::1:33413 4f8c200c.135b
3 PARSE 2012-04-16 15:35:08 CEST 3/219 0 ERREUR 42P01 la relation « toto
» n'existe pas

--
ccastello <ccastello(at)athmo(dot)eu>
Athmo - R.E.M.

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Pierre BOIZOT 2012-04-23 09:14:39 Create Role : expiration et contrainte sur le pwd
Previous Message ccastello 2012-04-20 09:10:18 Re: problème d'inscription ?