This module makes it possible to use PgBouncer as a connection pooler for odoo.
Why isn't odoo's connection pooling good enough?
Odoo's builtin connection pooling works at process level: each Odoo process has its own ConnectionPool, limited to db_maxconn.
It does the job of re-using open connections available in the pool. But it never closes these connections, unless reaching db_maxconn.
In practice, we observe that each odoo worker will end up with up to 3 open connection in its pool. With 10 http workers, that's up to 30 connection continuously open just for one single instance.
Here comes PgBouncer
PgBouncer will help to limit this number of open connections, by sharing a pool of connections at the instance level, between all workers. Odoo workers will still have up to 3 open connections, but these will be connections to PgBouncer, that on its side will close unnecessary connections to pg.
This has proven to help performances on Odoo deployments with multiple instances.
It allows you to define how resources should be shared, according to your priorities, e.g. :
- key odoo instance on host A can open up to 30 connections
- while odoo instance on host B, dedicated to reports, can open up to 10 connections only
And most importantly, it helps you to ensure that max_connections will never be reached on pg server side.
Why is this module needed?
When configuring PgBouncer, you can choose between 2 transaction pooling modes:
- pool_mode = session
- pool_mode = transaction
If we choose pool_mode = session, then one server connection will be tied to a given odoo process until its death, which is exactly what we're trying to change. Thus, to release the server connection once the transaction is complete, we use pool_mode = transaction.
This works fine, except for Odoo's longpolling features that relies on the LISTEN/NOTIFY mechanism from pg, which is not compatible with that mode.
To be more precise, NOTIFY statements are properly transfered by PgBouncer in that mode; only the LISTEN statement isn't (because it needs to keep the server connection open).
So for the unique "listening" connection per instance that requires this statement (here), we need odoo to connect directly to the pg server, bypassing PgBouncer.
That's what this module implements, by overriding the relevant method of the Dispatcher.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Allows Odoo to work with PgBouncer as an external database connection pooler by letting the instant-messaging dispatcher connect to a separate database host and port.
This is a technical compatibility module with no screens, menus or user-facing features. It changes how Odoo's real-time notification dispatcher (the background component that listens for database notifications and pushes them to open browser sessions) opens its database connection.
Normally that dispatcher connects to the same database as the rest of Odoo. With this module installed, the connection host and port used by the dispatcher can be overridden through Odoo configuration parameters or environment variables, so the dispatcher can be pointed at a PgBouncer instance instead of the database directly.
- The module replaces the standard dispatcher class with its own version.
- It reads the database connection details, then overrides the host and port if an alternative value is configured.
- It logs an informational message showing which host and port the dispatcher is listening on.
- It keeps the same listening behaviour: it listens on the
imbuschannel, waits for notifications, and forwards them to the relevant websockets.
It touches the bus module's dispatcher and websocket dispatching objects. No new models, fields, menus, reports, scheduled actions or business rules are added; the only effect is on how the notification dispatcher connects to PostgreSQL.
Depends on
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 7 confirmed, 2 with no information of 9 versions.
Sources · Odoo 12.0
Confirmed on 2026-11-03 in branch 12.0 of OCA/server-tools.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0You don't need to install this module in the database(s) to enable it.
But you need to load it server-wide:
- By starting Odoo with
--load=web,bus_alt_connection - Or by updating its configuration file:
[options]
(...)
server_wide_modules = web,bus_alt_connectionConfiguration
Source · Odoo 19.0You need to define how to connect directly to the database:
- Either by defining environment variables: > -
IMDISPATCHER_DB_HOST=db-01> -IMDISPATCHER_DB_PORT=5432 - Or in Odoo's configuration file:
[options]
(...)
imdispatcher_db_host = db-01
imdispatcher_db_port = 5432No verified information in OCA: Usage.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.