在 macOS 上正确安装 psql 而不需要完整的 Postgres 的方法是什么?

391

官方页面并没有提到这种情况。但是许多用户只需要psql而不需要本地数据库(我在AWS上有)。Brew没有psql


你认为为什么会存在一种“正确的方法”来做这件事,考虑到你已经链接到官方下载页面,而该页面明确表示没有任何方法? - Ssswift
对于使用MacPorts的用户,这是我所做的:https://superuser.com/questions/305031/how-do-i-install-the-postgres-command-line-client-psql-on-os-x-using-macports - sudo
14
@Ssswift这句话并没有说没有办法,只是没有说有办法。 - sudo
8个回答

828

你也可以使用Homebrew来安装libpq。

brew install libpq
这将为您提供psql、pg_dump以及许多其他客户端实用程序,而无需安装Postgres。不幸的是,由于它提供了与完整的postgresql软件包中包含的某些实用程序相同的内容,所以brew会将其“keg-only”安装,这意味着默认情况下它不在PATH路径中。Homebrew将在安装后输出有关如何将其添加到PATH路径的一些信息。在我的情况下,它是这样的:
echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.zshrc

或者,您可以为所需的实用程序创建符号链接。例如:

ln -s /usr/local/Cellar/libpq/10.3/bin/psql /usr/local/bin/psql

注意: 使用已安装的版本而不是10.3版本。

或者,您可以指导homebrew“将其所有二进制文件链接到路径中”。

 brew link --force libpq

但是这样你将无法安装postgresql软件包。


23
创建符号链接后,运行效果非常好:ln -s /usr/local/Cellar/libpq/10.3/bin/psql /usr/local/bin/psql - Engrost
38
你也可以执行 brew link --force libpq,但这会创建一堆其他符号链接,可能不是你想要/需要的。 - Dave
5
今日的符号链接 ln -s /usr/local/Cellar/libpq/11.3/bin/psql /usr/local/bin/psql / ln -s /usr/local/Cellar/libpq/11.3/bin/pg_dump /usr/local/bin/pg_dump / ln -s /usr/local/Cellar/libpq/11.3/bin/pg_restore /usr/local/bin/pg_restore - hotzen
2
不依赖于libpq版本的符号链接:for cmd in psql pg_dump pg_restore; do ln -s ../opt/libpq/bin/$cmd /usr/local/bin/$cmd; done - David Hull
34
现在我们处于M1世界,二进制文件的正确路径已经改变,因此命令是echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc - Esko
显示剩余6条评论

107
libpq 11.2 MacOS 和 zsh 或 bash
以下是可行的方法:
1. 安装 libpq
brew install libpq
  • 更新路径

    如果使用zsh:

    echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
    
    # 或者在M1 MacOS上
    echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
    

    如果使用bash:

    echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.bash_profile
    source ~/.bash_profile
    

  • 2
    如果你使用的是bash,请执行以下命令:echo 'export PATH="/usr/local/opt/libpq/bin:$PATH"' >> ~/.bash_profile - HenryC
    1
    @HenryC 是的,谢谢,bash 更常见,我的回答是基于 zsh 的。 - C.K.
    1
    请查看此评论以获取 Mac Mini M1 的 PATH 变量安装方法。 - Timo
    9
    M1 处理器上的 /opt/homebrew/opt/libpq/bin - it3xl

    70

    Homebrew只有一个postgres公式,并没有任何专门安装psql工具的公式。

    因此,“正确”的获取psql应用程序的方法确实是安装postgres公式,你会发现在“警告”部分的底部它实际上并不运行数据库,只是将文件放在您的系统中:

    $  brew install postgres
    ==> Downloading https://homebrew.bintray.com/bottles/postgresql-9.6.5.sierra.bottle.tar.gz
    ######################################################################## 100.0%
    ==> Pouring postgresql-9.6.5.sierra.bottle.tar.gz
    ==> /usr/local/Cellar/postgresql/9.6.5/bin/initdb /usr/local/var/postgres
    ==> Caveats
    <snip>
    To have launchd start postgresql now and restart at login:
      brew services start postgresql
    Or, if you don't want/need a background service you can just run:
      pg_ctl -D /usr/local/var/postgres start
    ==> Summary
      /usr/local/Cellar/postgresql/9.6.5: 3,269 files, 36.7MB
    

    现在您可以使用psql连接到远程Postgres服务器,而不必运行本地服务器,尽管如果您真的想要的话,也可以运行本地服务器。
    要验证本地的postgres守护程序是否正在运行,请检查您安装的Homebrew服务:
    $ brew services list
    Name       Status  User Plist
    mysql      stopped      
    postgresql stopped      
    

    如果您尚未安装 Homebrew Services,请执行以下操作

    $ brew tap homebrew/services
    

    如果您想获取这个功能,可以使用Homebrew Services。有关更多信息,请阅读这篇优秀的博客文章,详细介绍了它的工作原理


    3
    实际上,这并没有回答问题,问题归结为“如何在不安装Postgres的情况下安装psql(或其他Postgres实用程序)”。@PPS的回答https://dev59.com/rFcP5IYBdhLWcg3wRX9h#49689589是正确的。 - Benjamin R
    4
    在我看来,这是更好的选择,因为它不需要 brew link 步骤。由于公式中声明了 keg_only,所以强制链接 libpq 是必要的。考虑到这个具体的复杂性,我认为这个答案是实现问题要求的“正确”方式。然而,我也认识到许多用户仍然会更喜欢使用 libpq 方法。 - Andrew Bobulsky
    1
    是的,这种方式不需要操作符号链接或更改路径 :) - rogerdpack

    63
    如果确实不需要postgresql,那么甚至无需更改路径即可使用libra,只需链接libpq。文档中说这样做的唯一原因是为了避免与PostgreSQL软件包冲突。
    brew uninstall postgresql
    brew install libpq
    brew link --force libpq
    

    2
    我喜欢的是不必手动创建符号链接。这应该是被接受的答案。谢谢! - demisx

    41

    安装 libpq:

     brew install libpq
    

    然后,创建一个符号链接:

    sudo ln -s $(brew --prefix)/opt/libpq/bin/psql /usr/local/bin/psql
    

    希望能对你有所帮助。

    我认为这是最好的答案,因为它清晰明了,简洁明了,并且不受Mac版本的影响。 - undefined

    7

    我发现所有这些方法都很不令人满意,尤其是如果你需要支持多个版本的postgres。一个更加简单的解决方案是在这里下载二进制文件:

    https://www.enterprisedb.com/download-postgresql-binaries

    然后只需运行与你正在使用的数据库相匹配的psql可执行版本,而不需要任何额外的步骤。

    例如:

    ./path/to/specific/version/bin/psql -c '\x' -c 'SELECT * FROM foo;'
    

    1
    这对我有用。谢谢!以后参考,只需下载具有相同主要版本号的版本(次要版本不重要)。 - Pencilcheck
    1
    我只需要备份或还原数据库。最简单的解决方案。 - G.O.

    3

    我在这里找到了很多有用的答案,但由于Homebrew将安装文件移动到/opt/homebrew/Cellar/libpq/15.1,所以有点过时。在使用brew install libpq安装完libpq后,你可以运行以下命令查看新位置:

    brew link --force libpq
    

    然后,您可以使用以下命令将其添加到您的zshrc文件中:

    echo 'export PATH="/opt/homebrew/Cellar/libpq/15.1/bin:$PATH"' >> ~/.zshrc
    

    -12
    你可以尝试使用 brew install postgresql 命令来安装 PostgreSQL。
    但是,如果你想要一个漂亮的图形界面来管理你的数据库,可以考虑使用 https://postgresapp.com

    3
    使用命令 brew install postgresql 安装自带数据库的 psql :( - Vitaly Zdanevich
    它还会安装psql,但是作为额外奖励,您无需对PATH或符号链接进行调整... - rogerdpack
    可能有很多理由不安装完整版本的PostgreSQL。问题是如何避免安装它。 - Nickolay Kondratenko
    PostgresApp非常棒,如果您选择永远不初始化数据库并仅用于CLI工具,则可能是答案。 - Tomáš Hübelbauer

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