如何纠正psql版本与postgresql版本不匹配的问题?

10

在某个阶段,我发现postgresql-9.4psql(版本为9.3)存在版本不匹配的情况,尽管已安装版本9.4。

我认为我需要更正$PATH变量,但我不知道在哪里找到它。我查看了/etc/.bashrc文件,但没有找到任何指向正确方向的信息。

当我执行sudo find / -name psql时,结果为:

/usr/bin/psql
/usr/share/bash-completion/completions/psql
/usr/pgsql-9.4/bin/psql

yum list installed | grep postgres的输出结果如下:

postgresql.x86_64                9.3.9-1.fc21                          @updates 
postgresql-contrib.x86_64        9.3.9-1.fc21                          @updates 
postgresql-devel.x86_64          9.3.9-1.fc21                          @updates 
postgresql-libs.x86_64           9.3.9-1.fc21                          @updates 
postgresql-server.x86_64         9.3.9-1.fc21                          @updates 
postgresql94.x86_64              9.4.5-1PGDG.f21                       @pgdg94  
postgresql94-libs.x86_64         9.4.5-1PGDG.f21                       @pgdg94  
postgresql94-server.x86_64       9.4.5-1PGDG.f21                       @pgdg94 
3个回答

8

正如Craig Ringer所回答的那样-通常情况下,应该使用:

sudo update-alternatives --config pgsql-psql

然而,有时你会收到这样的消息:
failed to link /usr/bin/psql -> /etc/alternatives/pgsql-psql: /usr/bin/psql exists and it is not a symlink

如果是这样,请尝试:
ln -s /usr/pgsql-[PUT YOUR VERSION HERE(ex. 9.6)]/bin/psql /usr/local/bin/psql

最后一条指令 ln -s /usr/pgsql-9.6/bin/psql /usr/bin/psql 发送了 ln: fallo al crear el enlace simbólico «/usr/bin/psql»: El fichero ya existe - Fred Noriega
对于不会西班牙语的读者,上面的消息意味着:“无法创建符号链接“/usr/bin/psql”:文件已经存在”。您是否尝试使用rm删除现有链接并创建新链接?如果我没记错的话,ln不会替换链接。 - Alexander Gorg
3
这正是我在Centos 7上寻找的解决方案,因为基础仓库直接将psql二进制文件安装到了/usr/bin/psql目录中,所以安装PostgreSQL 10的yum命令在这个目录(以及其他10个二进制文件)上抛出了“链接失败”的错误。 - Randall

3

使用替代机制。在 Fedora 上:

sudo update-alternatives --config pgsql-psql

在使用Rodrigo Hjort的建议后,当我使用您的建议时,命令读取正确,并且只有一个选项:/usr/pgsql-9.4/bin/psql。但是运行psql的响应是启动版本9.3! - fatherdamo
1
@fatherdamo 啊。问题在于9.3包不使用替代方案,它们是Fedora的原始包。你还需要它们吗? - Craig Ringer
不,我认为它们是在我尝试让postgresql工作时安装的。我删除了 postgresql.x86_64,这也删除了 p*sql-contrib + devel + server,并完全删除了 postgresql-libs.x86_64。然后,psql 命令根本无法启动。update-alternatives --config 的读取结果应该是我认为的那样,但是没有列出 /usr/bin/psql。所以我删除了 postgresql94 并重新安装,一些9.3的软件包返回了,psql 命令进入了9.3!奇怪。 - fatherdamo
我记得在删除9.3软件包后,psql无法运行,操作系统建议安装postgresql以启用psql。这将重新安装9.3到系统中。因此,我再次删除了9.3,然后按照以下命令执行update-alternatives。现在一切都恢复正常了,psql可以正确地启动到相应的版本。 - fatherdamo

3

显然你正在使用CentOS或RHEL。

在这种情况下,你可以: 1)使用完整路径调用psql;或者2)通过以下命令以root身份替换当前的psql交替项:

update-alternatives --install /usr/bin/psql pgsql-psql /usr/pgsql-9.4/bin/psql 1

提示:在寻找文件或目录时,建议使用updatedblocate,而不是find命令。 :D


感谢您的回复,是的我在使用 Fedora 21。 看起来应该会生效,但是当我在命令行中输入 psql 时,我仍然启动 psql 版本9.3。我猜 /usr/bin/psql 是我的 bin 文件夹中名为 pgsql-psql 的符号链接,应该执行 /usr/pgsql-9.4/bin/psql?后一条命令可以正确启动到 psql 版本9.4,alternatives 看起来也正常命名,那么为什么 'psql' 不能工作? - fatherdamo
1
尝试运行 which psql 以查找 psql 指向的位置。如果它是一个符号链接,请一直跟随它,直到发现被调用的最终二进制文件。 - Rodrigo Hjort

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接