RHEL 7上Chef PostgreSQL Cookbook安装版本错误问题
这个问题我之前也碰到过,核心原因是系统的PATH环境变量里优先指向了系统自带的PostgreSQL 9.2的bin目录,而PGDG源安装的9.3版本的psql不在默认PATH的优先级位置,导致你执行psql -V时调用的是旧版本,虽然实际安装的9.3服务已经在/var/lib/pgsql/9.3目录运行了。
下面是具体的排查和解决步骤:
第一步:确认所有psql的路径
执行命令查看系统中所有psql的位置:which -a psql你应该会看到两个结果:一个是系统自带的
/usr/bin/psql(对应9.2.33),另一个是PGDG源安装的/usr/pgsql-9.3/bin/psql(对应9.3版本)。第二步:临时验证9.3版本的psql
直接调用9.3版本的psql路径来验证:/usr/pgsql-9.3/bin/psql -V这时候应该会显示正确的9.3版本,说明9.3确实已经安装成功。
第三步:调整PATH环境变量(临时生效)
把9.3版本的bin目录加到PATH最前面,让系统优先调用它:export PATH=/usr/pgsql-9.3/bin:$PATH再次执行
psql -V,应该就能看到9.3的版本信息了。第四步:永久设置PATH(避免重启后失效)
如果是单用户使用,可以编辑用户的bash配置文件:echo 'export PATH=/usr/pgsql-9.3/bin:$PATH' >> ~/.bashrc source ~/.bashrc如果是通过Chef管理整个系统的环境变量,可以在cookbook中添加配置,比如用
template资源修改/etc/profile或者全局bash配置,确保所有用户登录后都能优先使用9.3版本的命令。第五步:确认Chef cookbook的配置优化
检查你的Chef属性配置,添加bin_dir的设置,确保cookbook在执行后续操作时使用正确的版本:node.default['postgresql']['bin_dir'] = '/usr/pgsql-9.3/bin'这样cookbook在启动服务、执行初始化等操作时,都会调用9.3版本的工具。
第六步:(可选)卸载旧版本避免混淆
如果系统不再需要PostgreSQL 9.2,可以直接卸载:yum remove postgresql postgresql-server执行前注意确认没有其他依赖该版本的服务,避免影响系统运行。
内容的提问来源于stack exchange,提问作者Paul Croarkin

