一个连接服务文件(通常称为默认文件名 pg_service.conf)是一个配置文件,它允许将一个“服务”名称与一组 libpq conninfo 参数关联起来。
这使得可以为不同的 PostgreSQL 服务器创建别名,通过将 conninfo 的“service”参数设置为已定义的服务的名称来实现,例如:psql -d 'service=foo'。
在 连接服务文件 中定义的连接参数可以通过显式指定来覆盖,例如:psql -d 'service=foo user=bar'。
格式
该 连接服务文件 是一个简单的 .ini 文件格式,其中节名充当用户定义的连接名称,后面跟着一系列键/值对,表示 libpq conninfo 参数,例如:
[foo] host=foo.example.com user=bob port=12345
位置
将按以下位置搜索 连接服务文件
- 用户文件位于
~/.pg_service.conf或由环境变量PGSERVICEFILE指定的位置 - 系统范围文件位于
`pg_config --sysconfdir`/pg_service.conf或由环境变量PGSYSCONFDIR指定的目录中
用户文件中定义的服务的优先级高于系统范围文件中定义的服务的优先级。
由环境变量 PGSERVICEFILE 和 PGSYSCONFDIR 指定的文件位置将覆盖各自的默认值。如果文件未在指定位置找到,则不会回退到默认文件。
psql
从 PostgreSQL 18 开始,如果使用了服务名称,则可以从 SERVICE 变量中检索它,并使用 %s 参数在提示符中显示。
注意事项
- 无法定义适用于多个节的设置
- 无法被 JDBC 使用
变更历史
- PostgreSQL 7.1
- 添加(初始提交 f2ef4df4)
示例
源代码中提供了一个非常精简的带注释的 pg_service.conf 示例文件,位于 src/interfaces/libpq/pg_service.conf.sample。
参考资料
- PostgreSQL 文档: The Connection Service File (连接服务文件)
有用链接
- Postgres connection service file (Postgres 连接服务文件) - End Point 于 2016 年 10 月发表的博客文章
- pg_service.conf: The forgotten config file (pg_service.conf: 被遗忘的配置文件) - CyberTec 于 2016 年 2 月发表的博客文章
