如何通过Linux脚本检查PostgreSQL是否已安装?

如何通过Linux脚本检查PostgreSQL是否已安装?,linux,postgresql,shell,Linux,Postgresql,Shell,我想签入一个脚本,看看是否在Linux上安装了PostgreSQL,然后打印结果。 对如何进行检查有什么建议吗 如果它是基于debian的 aptitude show postgresql | grep State 但我想您可以尝试使用一些标志启动它,比如--version,它只打印一些信息并退出 使用“服务博士后状态”更新。尝试: 没有直接的方法可以做到这一点。您所能做的就是使用软件包管理器(rpm、dpkg)检查或探测所需文件的一些可能位置。或者您可以尝试连接到一个可能的端口(5432),

我想签入一个脚本,看看是否在Linux上安装了PostgreSQL,然后打印结果。 对如何进行检查有什么建议吗

如果它是基于debian的

aptitude show postgresql | grep State
但我想您可以尝试使用一些标志启动它,比如
--version
,它只打印一些信息并退出

使用“服务博士后状态”更新。尝试:


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

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

[...bin]# ./psql --version

psql (PostgreSQL) 9.0.4

给你

试试
哪个
命令怎么样

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

> which psql
>
但是如果安装了Postgres,您将得到一个响应,其中包含指向Postgres安装位置的路径:

> which psql
/opt/boxen/homebrew/bin/psql
看看
man,其中似乎还有一个选项可以帮助您:

-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可执行文件


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

  • 从用户主目录中的源安装
  • 从源代码安装到
    /opt
    /usr/local
    ,手动启动或由初始化脚本启动
  • 从分发服务器
    rpm
    /
    deb
    软件包安装,并通过初始化脚本启动
  • 从第三方
    rpm
    /
    deb
    软件包安装,并通过初始化脚本启动
  • 从软件包安装,但未设置为启动
  • 已安装客户端,正在连接到另一台计算机上的服务器
  • 已安装并正在运行,但不在默认路径或默认端口上
您不能依赖
psql
位于
路径上。您不能指望系统上只有一个
psql
(多个版本可能以不同的方式安装)。您不能基于端口执行此操作,因为无法保证它位于端口5432上,或者没有多个版本


提示用户并询问他们。

如果这些答案中的所有其他选项都失败了,您可以像这样使用“查找”。或者您可能需要使用sudo

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

如果您是用户,则需要sudopriv在所有目录中运行它

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


如果您运行的是Debian Linux(或其衍生物),并且有一个带有哪个psql的正返回,那么只需键入
psql-V
(大写字母“V”),您就会得到如下返回:
psql(postgresql)9.4.8

您也可以签入
/opt
挂载在以下路径
/opt/PostgresPlus/9.5AS/bin/
智能显示postgresql | grep版本

为我工作了很多年我使用了这个命令:

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

在我找到的某个地方,显示了locate命令的用法。对于这种情况,这个命令似乎更为贴切。

我们可以简单地写下:

psql --version
输出显示如下:

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

好吧,所有的回答都是好的,但不是所有的情况都是这样

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

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


ps使用Ubuntu18.04

值得注意的是,这个命令只适用于基于Debian的Linux发行版系列。没有工作,没有找到命令,我知道命令
服务posrgres状态
,但是如何检查结果我没有安装它,所以它打印出了“posrgres:无法识别的服务”有些系统没有
服务
命令。在Ubuntu或Debian中,我会检查
/etc/init.d/postgres status
或类似的东西。我应该指出,如果它说“posrgres:unrecognedservice”[sic],你可能仍然安装了“postgres”。只是说,万一有人复制粘贴,绝对正确。我已在
teapot
用户名下从源代码安装了PostgreSQL server,并将二进制/服务名称更改为
TeaPotSQL
。没有其他用户具有读取安装目录的权限。默认端口也会更改。找到它:-)你说的“安装了PostgreSQL”是什么意思?Pgsql客户端?客户端库?Pgsql server?另请参见这些通用BASH命令:唯一选项
w
psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)