Postgresql -bash: psql: 命令未找到。

63

我已经安装了PostgreSQL,并且它正常工作。但是,当我尝试恢复备份时,出现了错误-bash: psql: command not found

 [root@server1 ~]# su postgres
 [postgres@server1 root]$ psql -f all.sql
 bash: psql: command not found
 [postgres@server1 root]$ 

我做错了什么?


3
如果在同一台机器上先安装了PostgreSQL 9.2(包名为postgresql-server92),然后不小心又安装了PostgreSQL 8.4(包名为postgresql-server),那么在CentOS操作系统中就可能会出现这种情况。如果你卸载了PostgreSQL 8.4,yum也会将postgres二进制文件目录从路径中删除。 - Iain Samuel McLean Elder
^^ THIS! Thanks Iain - Joe Czucha
11个回答

50
export PATH=/usr/pgsql-9.2/bin:$PATH
程序可执行文件psql在目录/usr/pgsql-9.2/bin中,但该目录不包括在默认的路径中,因此我们必须告诉我们的shell(终端)程序去哪里找psql。当大多数软件包被安装时,它们会被添加到现有的路径中,比如/usr/local/bin,但这个程序不会。

因此,如果我们不想每次执行程序时都要键入完整的路径,就必须将程序的路径添加到shell PATH变量中。

通常应将此行添加到shell启动脚本中,对于bash shell来说,该文件为~/.bashrc


4
你能否扩充一下这条评论?它似乎很受欢迎,但如果能提供更多的信息(例如,上述行应该放在哪里?它们的作用是什么?),那就会更加有用。 - rainbowsorbet
2
如果您使用的是 Mac 并且已安装Postgres.app,则使用以下命令:export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH 或者export PATH=/Applications/Postgres.app/Contents/Versions/9.6/bin:$PATH - Chauskin Rodion
@ChauskinRodion 非常感谢!这个东西简直要了我的命。 - Luffydude

27

也许postgres用户的PATH中没有psql。使用locate命令查找psql所在的位置,并确保其路径已经添加到postgres用户的PATH中。


14

这个问题与Linux有关,但我在Windows机器上的Git Bash上也遇到了同样的问题。

我的postgresql安装在这里:C:\Program Files\PostgreSQL\10\bin\psql.exe

您可以像此答案中所述并在下面的屏幕截图中显示的方式将psql.exe的位置添加到Path环境变量中。

add psql.exe to your Path environment variable

更改以上内容后,请关闭所有cmd和/或bash窗口,并重新打开它们(如评论中所提到的@Ayush Shankar)。如果您正在使用Visual Studio Code之类的IDE,请关闭并重新打开整个IDE(如评论中所提到的@Somraj Chowdhury)

您可能需要使用以下命令更改默认日志用户。

psql -U postgres

这里的postgres是用户名。如果没有使用-U选项,则会选取当前登录的Windows用户。


1
此外,如果您仍然发现它无法正常工作,则关闭 cmd/bash 并打开一个新的窗口(不是选项卡)cmd/bash。 - Ayush Shankar
1
在使用 vscode 时,我不得不关闭并重新打开 IDE 本身(而不仅仅是关闭集成终端会话),才能使 psql 命令正常工作。 - Somraj Chowdhury

12

这可能是由于未将 psql 添加到 PATH 环境变量中导致的

$ locate psql
/usr/lib/postgresql/9.6/bin/psql

然后在 /usr/bin 中创建一个链接

ln -s /usr/lib/postgresql/9.6/bin/psql /usr/bin/psql

然后尝试执行psql,它应该可以工作。


5
如果您正在运行的是Fedora或CentOS,以下是我使用的方法(PostgreSQL 9.6):
在终端中:
$ sudo visudo -f /etc/sudoers

将以下文本改为:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

为了

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/pgsql-9.6/bin

退出,然后执行:
$ printenv PATH

$ sudo su postgres

$ psql

退出 postgreSQL 终端,您需要输入:

$ \q

来源:https://serverfault.com/questions/541847/why-doesnt-sudo-know-where-psql-is#comment623883_541880

当您使用sudo命令时,它在不同的环境下运行。这意味着可能会出现与您当前用户不同的PATH变量设置。如果您没有将psql二进制文件的完整路径添加到root用户的PATH中,则sudo命令无法找到该文件。因此,使用sudo时需要指定psql的完整路径,例如:sudo /usr/bin/psql。


2

检查是否安装了PostgreSQL。

如果没有安装,您可以使用以下命令在Ubuntu上执行相同操作。

sudo apt update
sudo apt install postgresql postgresql-contrib

1

这可能有两个原因,要么是软件包未安装,要么是在路径中未定义psql。

简单的方法是在/usr/bin或/usr/local/sbin/中创建一个链接。

首先找到该文件。

sudo find / -name psql

然后创建软链接。
sudo ln -sf /opt/pgpro/1c-14/bin/psql /usr/local/sbin/psql

1
如果您正在使用Heroku的Postgres Mac应用程序和Bundler,则可以将pg_config直接添加到应用程序中,并将其打包。
bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config

...然后再次运行bundle。

注意:首先使用以下命令检查版本。

ls /Applications/Postgres.app/Contents/Versions/

0
有时候我们会遇到这样的问题,当我们执行 gem 安装命令时,由于各种原因(例如 psql 不在路径中),无法找到 pg 客户端库。
在这种情况下,提供 pg_config 的路径可能会解决问题。
例如:
gem install pg -v 1.3.5 -- --with-pg-config=/path/to/pg_config
在我的情况下,当我在 Rosetta 环境中使用 Homebrew 安装 postgresql@12 时,也遇到了类似的问题。
以下命令解决了我的问题。
gem install pg -v 1.3.5 -- --with-pg-config=/usr/local/Homebrew/Cellar/postgresql@12/12.13/bin/pg_config

0
在Centos 7.9上进行安装后,我遇到了这个问题。我的调查结果如下:
  • Postgres的安装路径是/usr/pgsql-15
  • 执行echo $PATH命令得到的结果是/sbin:/bin:/usr/sbin:/usr/bin
从上面的路径输出中,你会发现PostgreSQL的安装路径没有添加到PATH中。
解决方法如下:
  • 在你的~/.bash_profile用户文件中将/usr/pgsql-15添加到PATH中,具体操作如下:

    PATH=$PATH:/usr/pgsql-15/bin

    export PATH


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