介绍
在本实验中,我们将在 LabEx 虚拟机上安装并执行 PostgreSQL 的初始设置。目标是让 PostgreSQL 成功运行并验证其基本功能。
我们将首先更新软件包列表,并安装 PostgreSQL 服务器以及 postgresql-contrib 软件包。安装完成后,我们将使用 pg_isready 命令验证 PostgreSQL 服务是否正在运行并接受连接。最后,我们将探索默认数据库,并检查服务器状态及基本配置。
安装 PostgreSQL 并验证安装
在此步骤中,我们将在 LabEx 虚拟机上安装 PostgreSQL 并验证安装是否成功。PostgreSQL 是一个功能强大的开源关系型数据库管理系统(RDBMS)。
首先,让我们更新软件包列表以获取升级和新安装信息。在 LabEx 虚拟机中打开终端(你可以在桌面上找到终端图标)。
执行以下命令:
sudo apt update
此命令会更新可用软件包及其版本的列表,但不会安装或升级任何软件包。你应该会看到指示软件包列表正在更新的输出信息。
接下来,安装 PostgreSQL 服务器和 postgresql-contrib 软件包。postgresql-contrib 软件包提供了许多实用的附加工具和功能。
执行以下命令:
sudo apt install postgresql postgresql-contrib -y

-y 标志会自动对安装过程中的任何提示回答「yes」。此命令将下载并安装 PostgreSQL 及其相关软件包。随着软件包的下载和安装,你将看到大量的输出信息。
安装完成后,我们需要验证 PostgreSQL 是否正在运行。PostgreSQL 在安装后应该会自动启动。
要检查 PostgreSQL 服务的状态,请执行以下命令:
sudo service postgresql status
我们也可以使用 pg_isready 命令来检查 PostgreSQL 服务器是否正在运行并接受连接。
执行以下命令:
pg_isready
如果 PostgreSQL 正在运行,你应该会看到以下输出:
/var/run/postgresql:5432 - accepting connections
如果 PostgreSQL 没有运行,你可能会看到类似以下的错误信息:
/var/run/postgresql:5432 - no response
如果遇到「no response」错误,请尝试重启 PostgreSQL 服务。你可以尝试以下命令:
sudo service postgresql restart
然后,再次运行 pg_isready 以检查状态。

如果 pg_isready 显示「accepting connections」,则确认 PostgreSQL 已成功安装并正在运行。
访问 PostgreSQL Shell (psql)
在此步骤中,我们将访问 PostgreSQL shell,即 psql,这是一个用于与 PostgreSQL 数据库交互的命令行工具。psql 允许你执行 SQL 查询、管理数据库并执行其他管理任务。
默认情况下,PostgreSQL 会创建一个名为 postgres 的 Unix 用户,该用户对应于 PostgreSQL 的超级用户。要访问 psql shell,你可以切换到 postgres 用户,或者使用 sudo 以 postgres 用户身份运行命令。
首先,让我们切换到 postgres 用户。执行以下命令:
sudo -i -u postgres
此命令将当前用户切换为 postgres。你会注意到提示符已更改以反映新用户。
现在你已以 postgres 用户身份登录,可以访问 psql shell 了。执行以下命令:
psql
此命令将打开 psql shell。你应该会看到如下所示的提示符:
postgres=#
这表明你已连接到 PostgreSQL 服务器,现在可以执行 SQL 命令了。
要退出 psql shell,请输入 \q 并按回车键:
postgres=## \q
这将返回到 postgres 用户的 shell。
要退出 postgres 用户的 shell 并返回到你的原始用户(labex),请输入 exit 并按回车键:
exit
或者,你可以使用 sudo 以 labex 用户身份直接访问 psql shell。这样就不需要切换用户了。

执行以下命令:
sudo -u postgres psql
此命令以 postgres 用户身份运行 psql 命令。你将直接连接到 psql shell。
同样,要退出 psql shell,请输入 \q 并按回车键:
postgres=## \q
这将返回到 labex 用户的 shell。
总之,你已经学习了两种访问 psql shell 的方法:切换到 postgres 用户和使用 sudo。两种方法都能达到同样的结果,但在某些情况下使用 sudo 会更方便。
探索默认数据库
在此步骤中,我们将探索安装 PostgreSQL 时创建的默认数据库。这些数据库提供了 PostgreSQL 服务器的基本功能和信息。
首先,以 postgres 用户身份访问 psql shell。你可以使用以下命令:
sudo -u postgres psql
进入 psql shell 后,你可以使用 \l 命令列出可用数据库。执行以下命令:
postgres=## \l
此命令将显示数据库列表,以及有关其所有者、编码和访问权限的信息。你应该至少看到三个数据库:
postgres:这是你首次访问psqlshell 时连接的默认数据库。它通常用于管理任务。template0:此数据库用作创建新数据库的模板。你不应该修改此数据库。template1:这是另一个用于创建新数据库的模板数据库。它是一个标准模板,可以进行自定义。

要连接到特定数据库,你可以使用 \c 命令后跟数据库名称。例如,要连接到 postgres 数据库,执行以下命令:
postgres=## \c postgres
你应该会看到一条消息,指示你现在已连接到 postgres 数据库:
You are now connected to database "postgres" as user "postgres".
现在你已连接到 postgres 数据库,可以探索其内容。例如,你可以使用 \dt 命令列出数据库中的表:
postgres=## \dt
此命令将显示当前数据库中的表列表。由于 postgres 数据库主要用于管理任务,因此它可能不包含任何用户定义的表。
你还可以使用 \conninfo 命令查看有关当前数据库连接的信息:
postgres=## \conninfo
此命令将显示数据库名称、用户、主机和端口等信息。
要断开与当前数据库的连接并返回到默认连接,你可以使用不带数据库名称的 \c 命令:
postgres=## \c
这将把你连接回默认数据库,通常是 postgres 数据库。

最后,通过输入 \q 并按回车键退出 psql shell:
postgres=## \q
这将返回到 labex 用户的 shell。
在此步骤中,你学习了如何列出可用数据库、连接到特定数据库,以及使用 psql shell 探索其内容。
检查服务器状态和基本配置
在此步骤中,我们将检查 PostgreSQL 服务器状态并探索一些基本配置设置。
如前所述,由于 LabEx 虚拟机在 Docker 容器中运行,systemctl 命令可能无法按预期工作。我们将主要使用 pg_isready 和 psql 来检查服务器状态。
首先,让我们重新验证 PostgreSQL 服务器是否正在运行。执行以下命令:
pg_isready
如果 PostgreSQL 正在运行,你应该会看到以下输出:
/var/run/postgresql:5432 - accepting connections
接下来,让我们使用 psql shell 检查一些基本配置设置。以 postgres 用户身份访问 psql shell:
sudo -u postgres psql
进入 psql shell 后,你可以使用以下 SQL 查询检查 PostgreSQL 版本:
SELECT version();
在 psql shell 中执行此查询。你应该会看到类似以下的输出:
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.17 (Ubuntu 14.17-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
(1 row)
这显示了服务器上安装的 PostgreSQL 版本。
你还可以检查当前的数据库用户:
SELECT user;
输出将是:
user
----------
postgres
(1 row)
要检查你当前连接的数据库名称,请使用:
SELECT current_database();
输出将是:
current_database
------------------
postgres
(1 row)
要查看配置设置,你可以使用 SHOW 命令。例如,要检查 listen_addresses 设置(它指定服务器监听连接的 IP 地址),请执行以下命令:
SHOW listen_addresses;
输出很可能是:
listen_addresses
--------------------
localhost
(1 row)
localhost 表示服务器正在监听本地主机。
另一个需要检查的有用设置是 port,它指定服务器监听连接的端口号:
SHOW port;
输出将是:
port
------
5432
(1 row)
这表明服务器正在监听 5432 端口,这是 PostgreSQL 的默认端口。

最后,通过输入 \q 并按回车键退出 psql shell:
postgres=## \q
这将返回到 labex 用户的 shell。
在此步骤中,你学习了如何使用 pg_isready 和 psql shell 检查 PostgreSQL 服务器状态并探索一些基本配置设置。
总结
在本实验中,我们使用 apt update 和 apt install postgresql postgresql-contrib -y 在 LabEx 虚拟机上安装了 PostgreSQL RDBMS。-y 标志用于在安装过程中自动接受提示。
安装完成后,我们验证了 PostgreSQL 服务正在运行并接受连接。由于 LabEx 虚拟机在 Docker 容器中运行,我们使用 pg_isready 命令而不是 systemctl status postgresql 来检查服务器状态。当服务器运行时,pg_isready 的预期输出为 /var/run/postgresql:5432 - accepting connections。


