ansible-role-postgresql核心变量详解:PostgreSQL部署配置终极参考清单
ansible-role-postgresql核心变量详解:PostgreSQL部署配置终极参考清单
ansible-role-postgresql 是一个开箱即用的 Ansible Role,可在 RHEL/CentOS、Debian/Ubuntu 等主流 Linux 系统上自动化安装并配置 PostgreSQL 数据库服务器,无需额外依赖,一个 become: yes 即可完成部署。本文带你逐一拆解它的全部核心变量,给你一份可直接套用的 PostgreSQL 部署配置参考清单 📋
一、它是什么?为什么值得用
这个 Role 的设计思路非常清晰:默认值齐全 + OS 自适应。执行时它会自动识别目标系统(如 Ubuntu 22.04、Rocky 9),加载对应的系统变量文件(如 vars/Ubuntu-22.yml、vars/RedHat-9.yml),再按顺序完成安装、初始化、配置、建库建用户,任务编排入口见 tasks/main.yml。
支持的发行版与版本范围可在 meta/main.yml 中查看,覆盖 Ubuntu 16.04~26、Debian 9~13、Fedora 34~43、RHEL 7~10 及 Arch Linux。
二、核心变量速览表
所有默认值定义在 defaults/main.yml 中,建议对照此表按需覆盖:
| 变量 | 默认值 | 作用 |
|---|---|---|
postgresql_service_state | started | 服务运行状态 |
postgresql_service_enabled | true | 是否开机自启 |
postgresql_auth_method | 自动选择 | 密码认证方式(md5 / scram-sha-256) |
postgresql_hba_entries | 4 条基础规则 | pg_hba.conf 认证规则 |
postgresql_databases | [] | 要创建的数据库列表 |
postgresql_users | [] | 要创建的用户列表 |
postgresql_privs | [] | 权限(GRANT)配置列表 |
postgresql_global_config_options | 2 项 | 写入 postgresql.conf 的选项 |
postgresql_locales | en_US.UTF-8 | Debian 系语言环境 |
postgresql_enablerepo | "" | RHEL/CentOS 专用安装源 |
postgresql_python_library | python-psycopg2 | Ansible 连接 PG 所需的 Python 库 |
postgres_users_no_log | true | 日志中隐藏敏感用户信息 |
三、服务与安装配置:最常用的一组变量
一键控制服务启停与开机自启
postgresql_service_state: started # 服务状态
postgresql_service_enabled: true # 开机自启
配置发生变更(如修改全局配置或认证规则)时,Role 会触发 restart postgresql 处理器,行为由 postgresql_restarted_state 控制,推荐 restarted 或 reloaded。
快速指定安装源与 Python 库
- RHEL/CentOS 用户:通过
postgresql_enablerepo指定 PostgreSQL 官方仓库,即可安装比系统仓库更新的大版本。 - Python 3 环境:将
postgresql_python_library改为python3-psycopg2,否则用户和数据库管理任务会因缺少驱动而失败 ⚠️(各 OS 变量文件已按系统预置好正确值)。
四、安全配置:认证方式与访问控制
密码认证方式自动适配
postgresql_auth_method: "{{ ansible_fips | ternary('scram-sha-256', 'md5') }}"
开启 FIPS 的系统自动使用 scram-sha-256,否则用 md5,通常无需手动干预。
访问控制规则(pg_hba.conf)
postgresql_hba_entries 定义了主机认证规则,渲染模板为 templates/pg_hba.conf.j2。默认包含:本地 peer 认证(postgres 用户与所有用户)、回环地址(IPv4/IPv6)密码认证。每条规则支持 type、database、user、address/ip_address/ip_mask、auth_method 等字段,覆盖时记得带上原有默认条目,避免误锁自己的管理通道 🔐。
敏感信息日志保护
postgres_users_no_log: true 会在执行用户管理任务时屏蔽密码等敏感数据输出,保持默认即可。
五、建库建用户:三个列表变量搞定业务初始化
声明式创建数据库
只需列出库名,其余全部有合理默认值(UTF-8 编码、template0 模板等):
postgresql_databases:
- name: example_db
执行逻辑见 tasks/databases.yml。
声明式创建用户
postgresql_users:
- name: example_user
password: supersecure
支持 role_attr_flags、encrypted、port 等可选字段,对应任务文件 tasks/users.yml。
精细化授权(权限配置)
postgresql_privs 用于对数据库对象做 GRANT 操作,必填项是 db 和 roles,可选 privs、type、objs、schema 等,适合"给某用户只授某张表的 SELECT"这类细粒度场景。
六、OS 特有变量:通常不用碰
variables.yml(tasks/variables.yml)会根据发行版加载 vars/ 目录下的文件,定义 postgresql_version、postgresql_data_dir、postgresql_bin_path、postgresql_config_path、postgresql_daemon、postgresql_packages 等 OS 级变量。它们只在你要使用非系统包方式安装的 PostgreSQL 时才需要覆盖,新手直接跳过这一节 ✅。
七、最小可用 Playbook 示例
- hosts: database
become: yes
vars_files:
- vars/main.yml
roles:
- geerlingguy.postgresql
其中 vars/main.yml 里写上前面介绍的 postgresql_databases 与 postgresql_users,跑一次即可得到一台可用、可自启、权限清晰的 PostgreSQL 服务器。
八、常见问题速查(FAQ)
- 用户/数据库没建出来? 检查
postgresql_python_library是否与目标机 Python 版本匹配(Python 3 用python3-psycopg2)。 - 改了
pg_hba.conf却连不上? 确认覆盖postgresql_hba_entries时保留了回环地址条目,且服务已重启。 - 想改全局参数(如
shared_buffers)? 追加到postgresql_global_config_options即可,Role 会自动写入postgresql.conf。 - CI 测试参考? 项目使用 Molecule + Docker 做集成测试,入口为 molecule/default/molecule.yml 与 molecule/default/converge.yml,可作为验收标准参考。
💡 小贴士:把本文第二节速览表保存到你的团队 Wiki,配合 defaults/main.yml 中的注释,基本可以覆盖 90% 的 PostgreSQL 自动化部署场景。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)