如何在 Rocky Linux 8 上安装和使用 PostgreSQL

介绍

Relational database management systems是许多网站和应用程序的关键组成部分,它们提供一个结构化的存储,组织和访问信息的方式。

PostgreSQL,也被称为Postgres,是一个关系式数据库管理系统,提供结构化查询语言的实现,更被称为SQL。它被许多受欢迎的项目使用,无论是大或小,它符合标准(https://www.postgresql.org/docs/current/features.html),并且具有许多先进的功能,如可靠的交易无读锁的竞争

通过遵循本指南,您将在Rocky Linux 8服务器上安装最新版本的PostgreSQL。

前提条件

要完成本教程,您将需要一个运行Rocky Linux 8的服务器。本服务器应该有一个非根用户,具有管理权限,并配置了防火墙

第1步:安装PostgreSQL

PostgreSQL 可从 Rocky Linux 的默认 AppStream 软件存储库中获取,并且您可以安装多个版本,您可以通过启用相应的包和依赖组合来选择这些版本,这些组合与您想要安装的版本一致,每个组合都被称为 module stream

在Rocky Linux的默认包管理器DNF中, _modules 是 RPM 包的特殊集合,它们共同构成一个更大的应用程序。

使用dnf命令列出postgresql模块的可用流:

1dnf module list postgresql
1[secondary_label Output]
2Name Stream Profiles Summary
3postgresql 9.6 client, server [d]          PostgreSQL server and client module
4postgresql 10 [d]          client, server [d]          PostgreSQL server and client module
5postgresql 12 client, server [d]          PostgreSQL server and client module
6postgresql 13 client, server [d]          PostgreSQL server and client module

在此输出中,你可以看到,有四个版本的 PostgreSQL 可用从 AppStream 存储库: 9.6, 10, 12,和 13. 提供 Postgres 版本 10 的流是默认的,正如其下面的 `[d] 所示。

要安装 PostgreSQL 版本 12,您必须启用该版本的模块流。当您启用模块流时,您会将默认流转移到系统中,并在系统上提供与启用流相关的所有包。

要启用 Postgres 版本 12 的模块流,运行以下命令:

1sudo dnf module enable postgresql:12

当提示时,按y,然后按ENTER,以确认您想要启用流:

 1[secondary_label Output]
 2====================================================================
 3 Package Architecture Version Repository Size
 4====================================================================
 5Enabling module streams:
 6 postgresql 12                                   
 7
 8Transaction Summary
 9====================================================================
10
11Is this ok [y/N]: y

启用版本 12 模块流后,您可以安装postgresql-server包来安装 PostgreSQL 12 及其所有依赖:

1sudo dnf install postgresql-server

当提供提示时,通过按y然后按ENTER来确认安装:

1[secondary_label Output]
2. . .
3Install 4 Packages
4
5Total download size: 16 M
6Installed size: 62 M
7Is this ok [y/N]: y

现在软件已安装,您将执行一些初始化步骤,为 PostgreSQL 准备一个新的数据库集群。

步骤 2 — 创建一个新的 PostgreSQL 数据库集群

您必须创建一个新的 PostgreSQL database cluster 才能开始创建表并加载数据。 数据库 cluster 是由单个服务器实例管理的数据库的集合。 创建数据库 cluster 包括创建数据库数据库将被放置的目录,生成共享目录表,并创建template1postgres数据库。

template1 数据库是一种用于创建新数据库的模板;所有存储在 'template1' 中的一切,即使是你自己添加的对象,在创建时都会被放置在新数据库中。

我们在上一个步骤中安装的 Postgres 包配有一个名为postgresql-setup的实用脚本,这有助于低级别的数据库集群管理。

1sudo postgresql-setup --initdb

您将看到以下结果:

1[secondary_label Output]
2 * Initializing database in '/var/lib/pgsql/data'
3 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

现在开始使用 systemctl的 PostgreSQL 服务:

1sudo systemctl start postgresql

然后,再一次使用systemctl,允许服务在服务器启动时启动:

1sudo systemctl enable postgresql

将产生以下产出

1[secondary_label Output]
2Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.

现在PostgreSQL正在运行,我们将继续使用角色来了解Postgres是如何工作的,以及它如何与您过去可能使用的类似数据库管理系统不同。

步骤 3 – 使用 PostgreSQL 角色和数据库

PostgreSQL 使用一个名为 roles的概念来处理客户端身份验证和授权,这些在某种程度上类似于常规的 Unix 类型帐户,但 Postgres 没有区分用户和组,而是更喜欢更灵活的术语角色。

在安装时,Postgres 设置为使用 ident authentication,这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户相关联。

安装过程创建了一个名为 postgres 的用户帐户,与默认的postgres角色相关联。

有几种方法可以使用此帐户访问 PostgreSQL 提示。

转到 postgres 帐户

在您的服务器上切换到 postgres 帐户,键入:

1sudo -i -u postgres

您现在可以通过键入立即访问 Postgres 提示:

1psql

这会让你登录到PostgreSQL提示,从这里你可以立即与数据库管理系统互动。

退出 PostgreSQL 提示通过键入:

1\q

这会让你回到postgres帐户的Linux命令提示.现在回到你的原始帐户,如下:

1exit

访问 Postgres 提示,而无需切换帐户

您还可以使用postgres 帐户直接使用sudo执行命令。

例如,在上一个示例中,您被指示先切换到 postgres 用户,然后运行psql,以打开Postgres提示,您可以通过运行单个命令psql作为sudo的 ** postgres** 用户,作为一个步骤来完成此操作:

1sudo -u postgres psql

这会让你直接登录到Postgres,而没有中间的bash壳。

再次,您可以通过键入退出互动 Postgres 会话:

1\q

在此步骤中,您使用了 postgres 帐户来访问psql提示,但许多使用案例需要多个 Postgres 角色。

步骤4:创建新角色

目前,您只需在数据库中配置了 postgres 角色,您可以使用createrole命令从命令行创建新角色。

如果您已登录为 postgres 帐户,您可以通过键入创建新用户:

1createuser --interactive

如果您更喜欢在不从正常帐户切换的情况下为每个命令使用sudo,请键入:

1sudo -u postgres createuser --interactive

脚本将提示您一些选择,并根据您的回复,执行必要的Postgres命令,以创建用户根据您的规格. 对于本教程,创建一个名为 sammy 的角色,并通过输入y在提示时给它超级用户权限:

1[secondary_label Output]
2Enter name of role to add: sammy
3Shall the new role be a superuser? (y/n) y

您可以通过通过一些额外的旗帜获得更多的控制权. 查看选项,通过查看用户页面:

1man createuser

您的 Postgres 安装现在有一个新的角色,但您尚未添加任何数据库。

步骤五:创建新数据库

Postgres 身份验证系统默认的另一个假设是,对于用于登录的任何角色,该角色将有一个具有相同名称的数据库,它可以访问。

这意味着,如果您在最后一节中创建的用户被称为 sammy ,该角色将尝试连接到默认情况下也被称为sammy的数据库。

如果您已登录为 postgres 帐户,您会输入类似的内容:

1createdb sammy

相反,如果您更喜欢在不从正常帐户切换的情况下为每个命令使用sudo,则您会键入:

1sudo -u postgres createdb sammy

这种灵活性为根据需要创建数据库提供了多个途径。

现在你已经创建了一个新的数据库,你将登录它与你的新角色。

步骤 6 – 通过新角色打开 Postgres 索引

要使用基于身份身份的身份验证登录,您需要一个与您的 Postgres 角色和数据库相同的 Linux 用户。

如果你没有一个匹配的Linux用户可用,你可以创建一个用adduser命令. 你将不得不从你的非root 帐户与sudo特权(即,没有登录作为 ** postgres** 用户):

1sudo adduser sammy

一旦这个新帐户可用,您可以切换,然后通过先键入连接到数据库:

1sudo -i -u sammy
2psql

或者,你可以做这个内线:

1sudo -u sammy psql

这个命令会自动登录你。

如果您希望您的用户连接到不同的数据库,则可以通过包括d标志并指定数据库,如下:

1psql -d sammy

一旦登录,您可以通过键入检查当前连接信息:

1\conninfo

这将显示以下结果:

1[secondary_label Output]
2You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

如果您正在连接到非默认数据库或与非默认用户。

连接到数据库后,您现在可以尝试创建和删除表。

步骤 7 – 创建和删除表

现在你已经知道如何连接到PostgreSQL数据库系统,你可以学习一些基本的Postgres管理任务。

首先,创建一个表格来存储一些数据,例如,你会创建一个表格,描述一些游乐场设备。

这个命令的基本语法如下:

1CREATE TABLE table_name (
2    column_name1 col_type (field_length) column_constraints,
3    column_name2 col_type (field_length),
4    column_name3 col_type (field_length)
5);

这些命令给表一个名称,然后定义列以及列类型和域数据的最大长度。

为了演示目的,创建一个表,如下:

1CREATE TABLE playground (
2    equip_id serial PRIMARY KEY,
3    type varchar (50) NOT NULL,
4    color varchar (25) NOT NULL,
5    location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
6    install_date date
7);

此命令将创建一个库存游戏场设备的表。它以设备ID开始,即序列类型。 此数据类型是自动增加的整数。 您还给了这个列PRIMARY KEY的限制,这意味着值必须是唯一的,而不是null。

对于两个列(‘equip_id’和‘install_date’),命令不会指定字段长度,因为某些列类型不需要设置长度,因为长度是由类型暗示的。

接下来的两行分别为设备类型颜色创建列,每个列都不能空。 这些列之后的行创建了一个位置列和一个限制,要求该值是八种可能的值之一。

您可以通过键入查看您的新表:

1\d

这将显示以下结果:

1[secondary_label Output]
2                  List of relations
3 Schema |          Name           |   Type   | Owner 
4--------+-------------------------+----------+-------
5 public | playground              | table    | sammy
6 public | playground_equip_id_seq | sequence | sammy
7(2 rows)

你的游乐场桌在这里,但也有一个名为playground_equip_id_seq的字符,它是序列类型,这是你给你的equip_id列的序列类型的表示。

如果您只想看到没有序列的表,您可以键入:

1\dt

这将产生如下:

1[secondary_label Output]
2          List of relations
3 Schema |    Name    | Type  | Owner 
4--------+------------+-------+-------
5 public | playground | table | sammy
6(1 row)

在此步骤中,您创建了一个示例表,在下一步,您将尝试在该表中添加、查询和删除条目。

步骤 8 — 在表中添加、查询和删除数据

现在你有一个表,你可以插入一些数据。

例如,通过呼叫要添加的表,命名列,然后为每个列提供数据来添加幻灯片和旋转,如下:

1INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
2INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

您应该小心地输入数据,以避免一些常见的错误,首先,不要将列名卷入引用标记,只需列值。

另外要记住的是,您不会输入equip_id列的值,因为每当在表中创建一个新行时,它就会自动生成。

通过键入获取您添加的信息:

1SELECT * FROM playground;

您将看到以下结果:

1[secondary_label Output]
2 equip_id | type  | color  | location  | install_date 
3----------+-------+--------+-----------+--------------
4        1 | slide | blue   | south     | 2017-04-28
5        2 | swing | yellow | northwest | 2018-08-16
6(2 rows)

在这里,您可以看到您的equip_id已成功填写,并且您的所有其他数据已被正确组织。

如果游戏场上的幻灯片破裂,你必须删除它,你也可以通过键入从你的桌子上删除行:

1DELETE FROM playground WHERE type = 'slide';

再来找桌子:

1SELECT * FROM playground;

你会看到以下:

1[secondary_label Output]
2 equip_id | type  | color  | location  | install_date 
3----------+-------+--------+-----------+--------------
4        2 | swing | yellow | northwest | 2018-08-16
5(1 row)

请注意,您的幻灯片不再是桌面的一部分。

现在您已在表中添加和删除条目,您可以尝试添加和删除列。

步骤 9 – 从表中添加和删除列

创建表后,您可以更改表格以添加或删除列,添加列以显示每个设备的最后维护访问,键入:

1ALTER TABLE playground ADD last_maint date;

如果您再次查看表信息,则会看到新列已添加(但未输入任何数据):

1SELECT * FROM playground;

你会看到以下:

1[secondary_label Output]
2 equip_id | type  | color  | location  | install_date | last_maint 
3----------+-------+--------+-----------+--------------+------------
4        2 | swing | yellow | northwest | 2018-08-16   | 
5(1 row)

如果您发现您的工作人员使用一个单独的工具来跟踪维护历史记录,您可以通过键入删除该列:

1ALTER TABLE playground DROP last_maint;

这会删除 last_maint列和其中的任何值,但将所有其他数据保持不变。

现在添加和删除列后,您可以在最后一步中尝试更新现有数据。

步骤 10 – 更新表中的数据

到目前为止,您已经学会了如何将记录添加到表中,以及如何删除它们,但本教程尚未涵盖如何修改现有条目。

您可以通过查询您想要的记录来更新现有记录的值,并将列设置为您想要使用的值。

1UPDATE playground SET color = 'red' WHERE type = 'swing';

您可以通过重新查询数据来验证操作是否成功:

1SELECT * FROM playground;

你会看到以下:

1[secondary_label Output]
2 equip_id | type  | color | location  | install_date 
3----------+-------+-------+-----------+--------------
4        2 | swing | red   | northwest | 2010-08-16
5(1 row)

正如您所看到的,您的幻灯片现在注册为红色

结论

你现在已经在你的Rocky Linux 8服务器上设置了PostgreSQL,但是,在Postgres中还有很多东西要学习。

Published At
Categories with 技术
comments powered by Disqus