Odoo 的每项工作都依赖应用服务器与 PostgreSQL 之间可靠的连接。数据库连接配置错误会导致无法启动、超时、认证失败、性能差甚至更严重问题。Odoo 19 仍使用 PostgreSQL;连接参数主要写在 odoo.conf。
python3 odoo-bin -c /etc/odoo.conf
1. 核心参数
[options] db_host = localhost db_port = 5432 db_user = odoo db_password = admin db_name = False
| 参数 | 含义 |
|---|---|
| db_host | localhost 表示同机;否则为远程库 IP/主机名 |
| db_port | 默认 5432(也可自定义如 5433) |
| db_user | Odoo 专用数据库用户(不要用 postgres 超级用户) |
| db_password | 对应用户密码——生产请用强密码 |
| db_name | False 显示选库界面;或强制连某一个库名 |
远程主机
生产常把 PostgreSQL 放在另一台机器(扩展、安全、独立资源、备份)。若出现 Connection refused,检查 PG 是否运行、防火墙/5432,以及 postgresql.conf 中的 listen_addresses(必要时如 listen_addresses = '*')。
创建专用用户(示例):
sudo -u postgres createuser -s odoo sudo -u postgres psql -c "ALTER USER odoo WITH PASSWORD 'admin';"
保护配置文件:
chmod 640 /etc/odoo.conf chown odoo:odoo /etc/odoo.conf
db_name 与 dbfilter
- db_name = False — 选库 / 多库
- db_name = production_db — 自动连指定库
- dbfilter = ^mycompany.*$ — 只显示匹配的库
- dbfilter = ^%d$ — 按域名:erp.company.com → 库 erp(常见多租户)
2. 连接池:db_maxconn
db_maxconn = 64
限制 Odoo 到 PostgreSQL 的连接数。超过 PG 的 max_connections 会出现:
FATAL: remaining connection slots are reserved / too many clients already
需结合 Worker 估算,例如 4 workers × 16 ≈ 64。若使用 PgBouncer/PgPool,池参数主要在中间件侧配置。
3. 模板与 SSL
db_template = template0
新建库建议用 template0,环境更干净(template1 可能带历史对象)。
默认连接未加密;生产应通过 PostgreSQL SSL、专网和/或 VPN 加固(在服务端/网络侧配置)。
4. 示例配置
- 单机 / 固定库 — 见 odoo.conf.single_server.sample
- 多库 + 域名过滤 — odoo.conf.multi_db_domain.sample
- 远程 PostgreSQL — odoo.conf.remote_postgres.sample
5. 修改后验证
sudo systemctl restart odoo sudo journalctl -u odoo -f psql -h localhost -U odoo -d postgres # 本机 psql -h 10.0.0.15 -U odoo -d postgres # 远程
监控连接:
SELECT * FROM pg_stat_activity;
6. 常见错误
| 错误 | 检查项 |
|---|---|
| Password authentication failed | 密码、用户、pg_hba.conf |
| Database does not exist | psql -U postgres -l |
| Too many clients already | db_maxconn、PG max_connections、Worker 数 |
| Timeout expired | 网络、防火墙、主机/端口 |
7. 最佳实践
- 为 Odoo 使用专用 PostgreSQL 用户
- 收紧 odoo.conf 权限
- 多库时使用 dbfilter
- 生产尽量将库与应用分机(若条件允许)
- 不要把 5432 暴露到公网