PostgreSQL11集群5433端口启动报exec不存在及配置参数不识别求助
PostgreSQL多版本共存启动报错原因及解决方案
报错原因
- 首次启动报错
exec: 5433: not found的原因:pg_ctl本身没有-p指定端口的参数,该参数是postgres进程的启动参数,直接给pg_ctl传-p 5433时,pg_ctl会将5433识别为postgres二进制文件的路径去执行,自然找不到对应文件报错。 - 第二次启动报配置参数不识别的原因:
服务器共存两个PG版本,当前环境变量默认调用的是9.6版本的pg_ctl,使用低版本的PG二进制程序去启动高版本(11)的数据目录,9.6版本不支持dynamic_shared_memory_type、max_wal_size、min_wal_size这些后续版本新增的配置参数,因此抛出配置不识别错误。
解决办法
- 第一步先找到PG11版本对应的二进制文件目录,可执行命令
find / -name pg_ctl | grep -E '11|pgsql-11'查询,常见路径为/usr/pgsql-11/bin/、/usr/local/pgsql-11/bin/等。 - 直接使用全路径的PG11的
pg_ctl执行启动命令,正确命令参考:
/<PG11二进制目录>/bin/pg_ctl -o "-p 5433" -D /storage/pgsql/11/data/ start
- 若需要简化操作,可临时调整当前会话的环境变量优先级,将PG11的二进制目录放在PATH最前,执行以下命令后再调用
pg_ctl就会默认使用11版本,该调整不会影响全局运行的9.6集群:
export PATH=/<PG11二进制目录>/bin:$PATH
- 长期使用可配置别名避免版本混淆,在
~/.bashrc中添加如下配置后执行source ~/.bashrc生效,后续启动对应版本直接调用pg_ctl11或pg_ctl96即可:
alias pg_ctl11='/<PG11二进制目录>/bin/pg_ctl' alias pg_ctl96='/<PG9.6二进制目录>/bin/pg_ctl'
内容的提问来源于stack exchange,提问作者cunay
相关产品推荐
相关产品推荐

