我想检查 Linux 上是否安装了 PostgreSQL 并打印结果。 关于如何进行检查有什么建议吗?
尝试使用
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 可执行文件。
echo $?
我们可以简单地写:
psql --version
输出显示如下:
psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)
如果是基于 Debian 的。
aptitude show postgresql | grep State
但我想你可以尝试使用像
--version
这样的标志来启动它,它只是打印一些信息并退出。
您可以检查该服务是否可用。尝试一下
service postgresql status
if [ "$?" -gt "0" ]; then
echo "Not installed".
else
echo "Intalled"
fi
或更广泛的 Linux 发行版
systemctl status postgresql
都可以使用。
没有单一简单的方法可以做到这一点,因为 PostgreSQL 可能以多种不同的方式安装和设置:
/opt
或/usr/local
,手动启动或通过初始化脚本启动rpm
/ deb
软件包安装并通过 init 脚本启动rpm
/ deb
软件包安装并通过 init 脚本启动PATH
或默认端口您不能依赖
psql
存在于 PATH
上。您不能依赖系统上只有一个 psql
(可能会以不同的方式安装多个版本)。您无法基于端口执行此操作,因为无法保证它位于端口 5432 上,或者不保证不存在多个版本。
提示用户并询问他们。
没有直接的方法可以做到这一点。您所能做的就是检查软件包管理器(rpm、dpkg)或探测您想要的文件的一些可能位置。或者您可以尝试连接到可能的端口 (5432) 并查看是否收到 PostgreSQL 协议响应。但这些都不会非常稳健。您可能需要查看您的要求。
如果您运行的是 Debian Linux(或衍生版本),并且您有一个带
> which psql
的正回报,那么只需输入 psql -V
(大写“V”),您将得到如下回报:psql (PostgreSQL) 9.4.8
如果这些绝佳答案的选择都失败了,你总是可以像这样使用“查找”。或者您可能需要使用 sudo
如果您是 root,只需输入
$$> find / -name 'postgres'
如果您是用户,则需要 sudo priv 才能在所有目录中运行它
我以这种方式运行它,从
/
基础查找元素所在的整个路径。这将返回其中包含“postgres”的任何文件或目录。
您也可以执行相同的操作来查找
pg_hba.conf
或 postgresql.conf
文件。
多年来我一直使用命令:
ps aux | grep postgres
一方面它很有用(对于任何流程)并提供有用的信息(但来自流程 POV)。但另一方面,它是为了检查您知道的、已经安装的服务器是否正在运行。
在某个时候我发现了本教程,其中显示了locate命令的用法。看起来这个命令对于这种情况来说更切题。
aptitude show postgresql | grep Version
为我工作
转到 postgres db 的 bin 目录,例如
/opt/postgresql/bin
并运行以下命令:
[...bin]# ./psql --version
psql (PostgreSQL) 9.0.4
给你。 .
您也可以签入
/opt
安装在以下路径/opt/PostgresPlus/9.5AS/bin/
嗯,上面的所有答案都很好,但并非在所有情况下都是如此。
基本检查文件夹
/etc/postgresql/
在大多数情况下,会有一个子文件夹,例如。
/etc/postgresql/11/
(或/etc/postgresql/12
)这意味着您已经安装了11(或12)版本,但是在许多情况下您可能有许多这样的子文件夹,因此拥有它们意味着所有这些版本都已安装并且可以在使用中......所以请注意这个重要的痕迹。
使用 Ubuntu 18.04