Le DML de mon programme php n'est pas pris en compte avec pgBouncer en mode transaction
Posté : mar. 12 mai 2026 16:20
Merci à Quentin pour sa question :
"
J'ai une configuration applicative en php 8.4, pgBouncer en 1.25 (pool_mode=transaction + max_prepared_statements=200) et libpq en 18. Quand je fais du DML (update, insert, delete), il n'est pas visible en base ensuite. Que se passe-t-il ?
"
Réponse :
Dans le log PostgreSQL avec log_statement à all, vous voyez des DEALLOCATE qui échouent au milieu d'une transaction:
begin; -- OK
update; -- OK
deallocate 'toto'; -- KO
commit; -- ROLLBACK !
PostgreSQL est, au contraire d'autres SGBDR, rigoureux sur la gestion transactionnelle. Une transaction avec une instruction KO n'est pas validée. Tout doit être 100% OK pour être validé. Dans le cas contraire, la transaction est annulée et PostgreSQL vous le dit.
Au sujet de ces deallocate parasites, le problème est corrigé en php 8.4. Vous avez une version de php en 8.4 mais probablement pour un "vieil" OS (e.g Debian 12 "Bookworm"). Votre php est compilé avec une ancienne version de libpq, cf https://github.com/php/php-src/issues/12940 donc ça n'est pas suffisant.
Avec un serveur d'appli en Debian 13 "Trixie" , tout devrait être OK nativement, même sans repo tiers.
"
J'ai une configuration applicative en php 8.4, pgBouncer en 1.25 (pool_mode=transaction + max_prepared_statements=200) et libpq en 18. Quand je fais du DML (update, insert, delete), il n'est pas visible en base ensuite. Que se passe-t-il ?
"
Réponse :
Dans le log PostgreSQL avec log_statement à all, vous voyez des DEALLOCATE qui échouent au milieu d'une transaction:
begin; -- OK
update; -- OK
deallocate 'toto'; -- KO
commit; -- ROLLBACK !
PostgreSQL est, au contraire d'autres SGBDR, rigoureux sur la gestion transactionnelle. Une transaction avec une instruction KO n'est pas validée. Tout doit être 100% OK pour être validé. Dans le cas contraire, la transaction est annulée et PostgreSQL vous le dit.
Au sujet de ces deallocate parasites, le problème est corrigé en php 8.4. Vous avez une version de php en 8.4 mais probablement pour un "vieil" OS (e.g Debian 12 "Bookworm"). Votre php est compilé avec une ancienne version de libpq, cf https://github.com/php/php-src/issues/12940 donc ça n'est pas suffisant.
Avec un serveur d'appli en Debian 13 "Trixie" , tout devrait être OK nativement, même sans repo tiers.