
Odoo 的每项工作都依赖应用服务器与 PostgreSQL 之间可靠的连接。数据库连接配置错误会导致无法启动、超时、认证失败、性能差甚至更严重问题。Odoo 19 仍使用 PostgreSQL;连接参数主要写在 odoo.conf。
bash
python3 odoo-bin -c /etc/odoo.conf
1. 核心参数
ini
[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 = '*')。
创建专用用户(示例):
bash
sudo -u postgres createuser -s odoo
sudo -u postgres psql -c "ALTER USER odoo WITH PASSWORD 'admin';"
保护配置文件:
bash
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
ini
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
ini
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. 修改后验证
bash
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 # 远程
监控连接:
sql
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 暴露到公网