【问题标题】:How can I check if PostgreSQL is installed or not via Linux script?如何通过 Linux 脚本检查是否安装了 PostgreSQL?
【发布时间】:2011-04-27 11:25:07
【问题描述】:

我想检查一个脚本是否在 Linux 上安装了 PostgreSQL 并打印结果。 有关如何进行检查的任何建议?

【问题讨论】:

标签: linux postgresql shell


【解决方案1】:

我们可以简单地写:

psql --version

输出显示如下:

psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)

【讨论】:

  • 这只会告诉你是否安装了psql,而不是是否安装了服务器(它报告的是 psql 版本,而不是可能安装的服务器的版本)
【解决方案2】:

试试which 命令怎么样?

如果您要运行 which psql 并且未安装 Postgres,则似乎没有输出。您只需让终端提示符准备好接受另一个命令:

> which psql
>

但如果 Postgres 已安装,您将收到包含 Postgres 安装位置路径的响应:

> which psql
/opt/boxen/homebrew/bin/psql

看看man which,似乎还有一个选项可以帮助你:

-s      No output, just return 0 if any of the executables are found, or
        1 if none are found.

因此,只要您使用的任何脚本语言都可以执行终端命令,您就可以发送which -s psql 并使用返回值来确定是否安装了 Postgres。从那里你可以打印任何你喜欢的结果。

我的机器上确实安装了 postgres,所以我运行以下命令

> which -s psql
> echo $?
0

这告诉我命令返回 0,表明在我的机器上找到了 Postgres 可执行文件。

Here's the information about using echo $?

【讨论】:

  • which 对我来说唯一的选项是 -a(打印每个参数的所有匹配路径名),如果我使用 -s,则会导致一个非法选项。
  • 嘿@Dennis 我不确定你的动机是什么,但我认为本着我最初回复的精神,你可以使用 -a 标志做一些事情。如果没有输出,那么您可以假设它没有安装,如果有输出,您知道它是(以及在哪里)安装它,因为您获得了路径。让我知道这是否有帮助或您有任何其他想法。
  • which 的问题在于它在不同的操作系统上差异很大。但是你是对的,-a 标志可以使用,你甚至可以完全不使用标志:if which foo >/dev/null; then echo exists; fi。另一个问题是这只会搜索你的 PATH。
  • which psql 不会告诉你是否安装了 Postgres 服务器。可以在没有服务器的情况下安装客户端包(psql)
【解决方案3】:

如果您正在运行 Debian Linux(或衍生产品)并且如果您使用 > which psql 获得正回报,那么只需输入 psql -V(大写“V”),您将获得类似以下的回报:psql (PostgreSQL) 9.4.8

【讨论】:

  • 我认为这仅表明 psql 客户端存在,而不是 OP 在他的评论中澄清的服务器。 psql 客户端版本也可能与服务器版本不匹配。
【解决方案4】:

如果从这些出色的答案选择中其他一切都失败了,您始终可以像这样使用“查找”。或者你可能需要使用 sudo

如果您是 root,只需输入 $$> find / -name 'postgres'

如果您是用户,则需要 sudo priv 才能在所有目录中运行它

我以这种方式运行它,从/ 基址查找元素所在的整个路径。这将返回其中包含“postgres”的任何文件或目录。

您也可以执行相同的操作来查找 pg_hba.confpostgresql.conf 文件。

【讨论】:

    【解决方案5】:

    多年来我一直使用这个命令:

    ps aux | grep postgres
    

    一方面它是有用的(对于任何过程)并提供有用的信息(但来自过程 POV)。但另一方面,它用于检查您知道的、您已经安装的服务器是否正在运行。

    在某个时候,我找到了this tutorial,其中显示了 locate 命令的用法。看起来这个命令更适合这种情况。

    【讨论】:

      【解决方案6】:

      如果它是基于 debian 的。

      aptitude show postgresql | grep State
      

      但我想你可以尝试使用像 --version 这样的标志来启动它,它只是打印一些信息并退出。

      更新使用“服务 postgres 状态”。试试:

      service postgres status
      if [ "$?" -gt "0" ]; then
        echo "Not installed".
      else
        echo "Intalled"
      fi
      

      【讨论】:

      • 值得注意的是,该命令仅适用于基于 Debian 的 Linux 发行版系列。
      • 没有工作,没有找到命令,我知道命令service posrgres status,但是如何检查结果
      • 我没有安装,所以打印出“posrgres: unrecognized service”
      • 有些系统没有service 命令。在 Ubuntu 或 Debian 中,我会检查 /etc/init.d/postgres status 或类似的东西。
      • 我应该指出,如果它说“posrgres:无法识别的服务”[原文如此],您可能仍然安装了“postgres”。只是说',以防有人复制和粘贴。
      【解决方案7】:

      没有一种简单的方法可以做到这一点,因为 PostgreSQL 可能以多种不同的方式安装和设置:

      • 从用户主目录中的源代码安装
      • 从源安装到 /opt/usr/local,手动启动或由 init 脚本启动
      • 从分发服务器 rpm / deb 包安装并通过初始化脚本启动
      • 从第 3 方 rpm / deb 包安装并通过初始化脚本启动
      • 从包安装但没有设置为启动
      • 客户端已安装,正在连接到另一台计算机上的服务器
      • 已安装并运行,但不在默认 PATH 或默认端口上

      您不能依赖psql 依赖PATH。您不能依赖系统上只有一个psql(可能以不同的方式安装多个版本)。你不能根据端口来做,因为不能保证它在端口 5432 上,或者没有多个版本。

      提示用户并询问他们。

      【讨论】:

        【解决方案8】:

        aptitude show postgresql | grep Version 为我工作

        【讨论】:

          【解决方案9】:

          转到 postgres db 的 bin 目录,例如 /opt/postgresql/bin 并运行以下命令:

          [...bin]# ./psql --version
          
          psql (PostgreSQL) 9.0.4
          

          给你。 .

          【讨论】:

          • 我们可以简单的写成:psql --version 输出显示为:psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)
          【解决方案10】:

          没有直接的方法可以做到这一点。您所能做的就是检查软件包管理器(rpm、dpkg)或探查一些可能的位置以找到您想要的文件。或者您可以尝试连接到可能的端口 (5432) 并查看是否收到 PostgreSQL 协议响应。但这一切都不会非常强大。您可能需要查看您的要求。

          【讨论】:

          • 完全正确。我已经在teapot 用户名下从源安装了我的PostgreSQL 服务器,并将二进制/服务名称更改为TeaPotSQL。没有其他用户有权读取安装它的目录。默认端口也已更改。去找它:-)
          【解决方案11】:

          您也可以签入/opt 挂载到以下路径/opt/PostgresPlus/9.5AS/bin/

          【讨论】:

            【解决方案12】:

            好吧,以上所有答案都很好,但并非在所有情况下都很好。

            基本检查文件夹/etc/postgresql/

            在大多数情况下会有一个子文件夹,例如。 /etc/postgresql/11/(或/etc/postgresql/12)这意味着您已经安装了 11(或 12)版本,但是在许多情况下,您可能有许多这样的子文件夹,因此拥有它们意味着所有这些版本都已经安装并且可能是正在使用中...所以要注意这个重要的痕迹。

            ps 使用 Ubuntu 18.04

            【讨论】:

              猜你喜欢
              • 2012-01-18
              • 2012-03-09
              • 2018-11-23
              • 2020-10-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多