如何在Ubuntu 22.04上安装和使用PostgreSQL

介绍

关系型数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种结构化的方式来存储、组织和访问信息。

PostgreSQL,或称为Postgres,是一个关系型数据库管理系统,提供了SQL查询语言的实现。它符合标准,并具有诸如可靠的事务和无读锁并发等许多高级功能。

本指南演示了如何在Ubuntu 22.04服务器上安装Postgres。它还提供了一些通用数据库管理的说明。

先决条件

要按照本教程操作,您需要一个已经配置好的Ubuntu 22.04服务器,配置方法请参考我们的Ubuntu 22.04初始服务器设置指南。完成这个先决条件教程后,您的服务器应该有一个具有sudo权限的非root用户和一个基本的防火墙。

步骤1 — 安装 PostgreSQL

Ubuntu 的默认仓库中包含了 PostgreSQL 软件包,因此您可以使用 apt 包管理系统来安装它们。

如果您最近没有这样做,请刷新服务器的本地软件包索引:

  1. sudo apt update

然后,安装 PostgreSQL 软件包以及一个 -contrib 软件包,它添加了一些额外的实用工具和功能:

  1. sudo apt install postgresql postgresql-contrib

确保服务器正在运行,使用 systemctl start 命令:

  1. sudo systemctl start postgresql.service

现在软件已安装并运行,我们可以介绍它的工作原理以及与您可能使用过的其他关系型数据库管理系统的不同之处。

步骤2 — 使用 PostgreSQL 角色和数据库

默认情况下,Postgres 使用称为 角色 的概念来处理身份验证和授权。在某些方面,这与常规的 Unix 风格帐户相似,但 Postgres 不区分用户和组,而是更倾向于更灵活的术语“角色”。

安装后,Postgres 被设置为使用对等身份验证,这意味着它将 Postgres 角色与相匹配的 Unix/Linux 系统账户关联起来。如果在 Postgres 中存在一个角色,具有相同名称的 Unix/Linux 用户名就能以该角色登录。

安装过程创建了一个名为postgres的用户账户,该账户与默认的 Postgres 角色关联。要使用 Postgres,您可以登录该账户。

有几种方法可以使用这个账户来访问 Postgres。

切换到 postgres 账户

通过键入以下命令来切换到您服务器上的postgres账户:

  1. sudo -i -u postgres

现在您可以立即键入以下命令访问 PostgreSQL 提示符:

  1. psql

从那里,您可以根据需要与数据库管理系统交互。

通过键入以下命令退出 PostgreSQL 提示符:

  1. \q

这将带您回到postgres Linux 用户的命令提示符。

在不切换账户的情况下访问 Postgres 提示符

您还可以直接使用sudopostgres帐户运行所需的命令。

例如,在上一个示例中,您被指示首先切换到postgres用户,然后运行psql以打开Postgres提示符。您可以通过以下单个命令以sudo身份作为postgres用户运行psql来一次性执行此操作:

  1. sudo -u postgres psql

这将直接登录到Postgres,而不需要中间的bash shell。

同样,您可以通过键入以下内容退出交互式Postgres会话:

  1. \q

许多用例需要多个Postgres角色。继续阅读了解如何配置这些角色。

步骤3 —— 创建新角色

当前,数据库中配置了postgres角色。您可以使用createuser命令从命令行创建新角色。--interactive标志将提示您输入新角色的名称,并询问是否应该具有超级用户权限。

如果您以postgres帐户登录,可以键入以下内容创建新用户:

  1. createuser --interactive

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

  1. sudo -u postgres createuser --interactive

脚本将提示您做出一些选择,并根据您的响应执行正确的Postgres命令来创建符合您要求的用户。

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

您可以通过传递一些额外的标志来获得更多控制。通过查看createuser命令的man页面来了解选项:

  1. man createuser

您的Postgres安装现在有一个新用户,但您尚未添加任何数据库。下一部分描述了此过程。

步骤4 — 创建新数据库

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

这意味着如果您在上一部分中创建的用户名为sammy,那么该角色将尝试连接到默认情况下也称为“sammy”的数据库。您可以使用createdb命令创建适当的数据库。

如果您以postgres账户登录,您会键入类似以下内容:

  1. createdb sammy

如果您更喜欢在不切换到您的普通账户的情况下为每个命令使用sudo,您可以键入:

  1. sudo -u postgres createdb sammy

此灵活性提供了多种创建所需数据库的路径。

第5步 — 使用新角色打开Postgres提示符

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

如果您没有可用的匹配的Linux用户,您可以使用adduser命令创建一个。您需要使用具有sudo特权的非root帐户执行此操作(也就是说,不要以postgres用户身份登录):

  1. sudo adduser sammy

一旦新帐户可用,您可以通过键入以下内容切换并连接到数据库:

  1. sudo -i -u sammy
  2. psql

或者,您可以直接执行此操作:

  1. sudo -u sammy psql

此命令将自动登录您,假设所有组件都已正确配置。

如果您希望用户连接到不同的数据库,可以通过以下方式指定数据库:

  1. psql -d postgres

登录后,您可以通过键入以下内容检查当前连接信息:

  1. \conninfo
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

如果您连接到非默认数据库或使用非默认用户,则此操作很有用。

第6步 — 创建和删除表

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

创建表的基本语法如下:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

此命令为表指定名称,然后定义列以及列类型和字段数据的最大长度。可选地,您可以为每个列添加约束。

您可以通过阅读我们的指南了解更多关于创建表的信息:如何在 SQL 中创建和管理表

为了演示目的,创建以下表:

  1. CREATE 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. );

此命令将创建一个用于库存操场设备的表。表中的第一列将保存serial类型的设备 ID 号,这是一个自增整数。此列还具有PRIMARY KEY的约束,这意味着其中的值必须是唯一且非空的。

接下来的两行创建了分别用于设备类型颜色的列,两者都不能为 null。在这些之后的行创建了一个位置列,并附加了一个约束,要求值必须是八个可能值之一。最后一行创建了一个记录安装设备日期的日期列。

对于两个列(equip_idinstall_date),命令未指定字段长度。这是因为某些数据类型不需要设置长度,因为长度或格式是隐含的。

通过键入检查您的新表:

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

你的游乐场桌子在这里,但还有一个叫做playground_equip_id_seq的东西,它是sequence类型。这是你给equip_id列指定的serial类型的表示。它会跟踪序列中的下一个数字,并且会自动为这种类型的列创建。

如果你只想查看表而不包括序列,你可以键入:

  1. \dt
Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

有了一张表,我们来用它练习数据管理。

第7步 —— 在表中添加、查询和删除数据

现在你有了一张表,你可以向其中插入一些数据。例如,通过调用你想要添加数据的表,命名列,然后为每列提供数据,像这样:

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

在输入数据时要小心避免一些常见问题。首先,不要用引号括起列名,但输入的列值确实需要用引号括起来。

另一件需要记住的事情是不要为equip_id列输入值。这是因为每当你向表中添加新行时,它会自动生成。

通过键入检索你添加的信息:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

注意你的equip_id已成功填写,并且你的所有其他数据已经正确组织。

如果游乐场的滑梯坏了,你需要移除它,你也可以通过输入以下内容来移除表中的行:

  1. DELETE FROM playground WHERE type = 'slide';

再次查询表格:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

注意,slide 行不再是表格的一部分。

步骤 8 — 向表中添加和删除列

创建表格后,您可以通过添加或删除列来修改它。键入以下内容添加一列,以显示每台设备的最后维护访问:

  1. ALTER TABLE playground ADD last_maint date;

再次查看您的表信息。已添加新列,但尚未输入任何数据:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

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

  1. ALTER TABLE playground DROP last_maint;

这将删除last_maint列以及其中找到的任何值,但会保留所有其他数据。

步骤 9 — 更新表中的数据

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

您可以通过查询要更新的记录并将列设置为要使用的值来更新现有条目的值。您可以查询 swing 记录(这将匹配表中的 每一个 摆动)并将其颜色更改为 红色。如果您给秋千设置了油漆,这可能会很有用:

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

您可以再次查询数据以验证操作是否成功:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

滑梯现在被注册为红色。

结论

您现在已经在您的 Ubuntu 22.04 服务器上设置了 PostgreSQL。如果您想了解更多关于Postgres及其如何使用的信息,我们鼓励您查看以下指南:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-22-04