为什么我不能将PostgreSQL添加到我的路径中?

ste*_*ble 16 postgresql macos

升级到Mavericks之后,PostgreSQL开始播放,每当我打电话时都会发出此错误消息pg_restore而不调用完整路径:

pg_restore: command not found
Run Code Online (Sandbox Code Playgroud)

如果我指定它的完整路径,但这显然不是最佳的:

/Applications/Postgres93.app/Contents/MacOS/bin/pg_restore --verbose --clean --no-acl --no-owner -h localhost -U steven -d db/testivate_development $file_path
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我尝试删除所有版本的PostgreSQL(使用Homebrew),然后安装Postgres.app.您可以确认这样做是这样的:

$ sudo find / -name pg_restore
/Applications/Postgres93.app/Contents/MacOS/bin/pg_restore
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
Run Code Online (Sandbox Code Playgroud)

要将PostgreSQL添加到我的路径,我尝试添加以下每行~/.bash_profile,~/bashrc~/.zshrc在每次尝试后重新启动:

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

...根据postgresapp.com文档,然后......

export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

......根据以下评论.

这些都没有解决我的问题.

l'L*_*L'l 11

尝试将此行添加到.bash_profile:

export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

并删除或注释掉以前的参考.

  • 如果您有更新版本的postgresapp,您的命令将看起来像e export`export PATH ="/ Applications/Postgres.app/Contents/Versions/9.3/bin:$ PATH"` (3认同)

Rub*_*oob 10

我也有这个问题,所以不要在.bash_profile中将它添加到我的路径中:

export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

我补充说,这是推荐的

export PATH="/Applications/Postgres.app/Contents/Versions/9.3/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

代替.'9.3'将替换为您自己的版本.

之后我用它验证了它

which psql
Run Code Online (Sandbox Code Playgroud)

它找到了我的版本,而之前没有报道.

然后我创建了一个测试数据库

createdb test
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力.


Isr*_*rba 7

如果您使用的是zsh,请在.zshrc中尝试使用此行,然后重新启动终端

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin
Run Code Online (Sandbox Code Playgroud)


pnd*_*ndc 5

其他人给出的例子应该export PATH=...可以解决您的问题。由于它不起作用,您将不得不使用 shell 来调试与 PostgreSQL 无关的问题。

首先,检查您的路径中which pg_restore是否有另一个pg_restore令人困惑的文件被调用。which如果没有找到任何内容,通常不会给出任何输出,而不是一个有用的错误,否则它将打印找到的内容的路径。/usr/local/bin例如,您可能会在 中找到旧的损坏的 PostgreSQL 安装。

如果这不起作用,请尝试echo $PATH使用新的 shell。你看到那里的 PostgreSQL 二进制目录的路径了吗?如果没有,$PATH则说明您的 shell dot-rc 文件中未设置。~/bashrc如果您将其添加到一个名为bash(1) 实际读取的文件中,就会出现这种情况~/.bashrc。注意额外的点!我怀疑是你的实际问题。

如果这不是问题,您可以使用 .(重新)将 rc 文件读入当前会话source ~/.bashrc。同样,echo $PATH如果它仍然不包含路径,则 dot-rc 文件包含错误,并且不会执行更新的部分$PATH。您可以bash --verbose ~/.bashrc运行它,然后您将看到正在执行的每个命令。失败的命令应该是最后显示的命令。(请注意,当您使用 运行脚本时bash,它不会在当前 shell 中设置变量。)