如何修改pg_config输出的PostgreSQL版本?Ubuntu 14环境求助
看起来你遇到的问题是系统里的pg_config工具优先指向了PostgreSQL 10的版本,但实际上你只安装了9.6。这是很常见的PATH优先级或者依赖包关联的问题,我来一步步帮你解决:
问题原因
你的系统里虽然没有安装PostgreSQL 10服务器,但libpq-dev包(版本10.1)自带了对应版本的pg_config工具,而且它的路径在系统PATH里的优先级比PostgreSQL 9.6的pg_config更高,所以执行pg_config时会默认调用10版本的工具,显示错误的版本信息。
解决方法
1. 临时查看9.6版本的pg_config信息
直接指定PostgreSQL 9.6的pg_config路径执行,就能看到正确的版本:
/usr/lib/postgresql/9.6/bin/pg_config
执行后应该会显示VERSION = PostgreSQL 9.6.6。
2. 永久修改默认pg_config版本
要让系统默认使用9.6版本的pg_config,需要调整环境变量PATH,把9.6的bin目录放到PATH最前面:
- 编辑用户的bash配置文件(比如
~/.bashrc):nano ~/.bashrc - 在文件末尾添加一行:
export PATH=/usr/lib/postgresql/9.6/bin:$PATH - 保存并退出后,让配置生效:
source ~/.bashrc
现在再执行pg_config,应该就会显示PostgreSQL 9.6.6的版本信息了。你可以用which pg_config验证,输出应该是/usr/lib/postgresql/9.6/bin/pg_config。
3. 不建议直接修改pg_config文件
你问到能不能通过修改pg_config文件来改版本显示,这里强烈不建议这么做:pg_config是PostgreSQL编译时生成的工具,里面的版本、路径等信息都是硬编码的,直接修改内容会导致后续依赖它的工具(比如编译PostgreSQL扩展、第三方软件)获取错误的环境信息,引发兼容性问题,反而会带来更多麻烦。
补充说明
libpq-dev是PostgreSQL客户端库的开发包,它可以和不同版本的服务器端兼容,所以即使你只装了9.6的服务器,也可以安装10版本的libpq-dev。但它自带的pg_config会和包版本一致,这就是为什么你看到的libpq-dev是10版本的原因。
内容的提问来源于stack exchange,提问作者Tomislav Mikulin

