PostgreSQL 的安装与初始设置

PostgreSQLBeginner
立即练习

介绍

在本实验中,我们将在 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

PostgreSQL 安装输出

-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 命令输出

如果 pg_isready 显示「accepting connections」,则确认 PostgreSQL 已成功安装并正在运行。

访问 PostgreSQL Shell (psql)

在此步骤中,我们将访问 PostgreSQL shell,即 psql,这是一个用于与 PostgreSQL 数据库交互的命令行工具。psql 允许你执行 SQL 查询、管理数据库并执行其他管理任务。

默认情况下,PostgreSQL 会创建一个名为 postgres 的 Unix 用户,该用户对应于 PostgreSQL 的超级用户。要访问 psql shell,你可以切换到 postgres 用户,或者使用 sudopostgres 用户身份运行命令。

首先,让我们切换到 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

或者,你可以使用 sudolabex 用户身份直接访问 psql shell。这样就不需要切换用户了。

psql 命令执行示例

执行以下命令:

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:这是你首次访问 psql shell 时连接的默认数据库。它通常用于管理任务。
  • template0:此数据库用作创建新数据库的模板。你不应该修改此数据库。
  • template1:这是另一个用于创建新数据库的模板数据库。它是一个标准模板,可以进行自定义。

可用 PostgreSQL 数据库列表

要连接到特定数据库,你可以使用 \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 数据库。

psql 命令连接到 postgres 数据库

最后,通过输入 \q 并按回车键退出 psql shell:

postgres=## \q

这将返回到 labex 用户的 shell。

在此步骤中,你学习了如何列出可用数据库、连接到特定数据库,以及使用 psql shell 探索其内容。

检查服务器状态和基本配置

在此步骤中,我们将检查 PostgreSQL 服务器状态并探索一些基本配置设置。

如前所述,由于 LabEx 虚拟机在 Docker 容器中运行,systemctl 命令可能无法按预期工作。我们将主要使用 pg_isreadypsql 来检查服务器状态。

首先,让我们重新验证 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 的默认端口。

PostgreSQL psql shell 输出

最后,通过输入 \q 并按回车键退出 psql shell:

postgres=## \q

这将返回到 labex 用户的 shell。

在此步骤中,你学习了如何使用 pg_isreadypsql shell 检查 PostgreSQL 服务器状态并探索一些基本配置设置。

总结

在本实验中,我们使用 apt updateapt 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