关系数据库管理系统是许多网站和应用程序的关键组件。 它们提供了一种结构化的方式来存储、组织和访问信息。
PostgreSQL 或 Postgres 是一种关系数据库管理系统,它提供 SQL 查询语言的实现。 它符合标准并具有许多高级功能,例如可靠的事务处理和没有读锁的并发性。
本文档说明了如何在 Ubuntu 22.04 服务器上安装 Postgres。 它还为一般数据库管理提供了一些说明。
安装PostgresSQL
Ubuntu 的默认存储库包含 Postgres 包,因此您可以使用 apt 打包系统安装它们。
刷新本地包索引:
sudo apt update
然后,安装 Postgres 包以及添加一些额外实用程序和功能的 -contrib 包:
sudo apt install postgresql postgresql-contrib
使用 systemctl start 命令确保服务正在运行:
sudo systemctl start postgresql.service
现在该软件已安装并运行,我们可以了解它的工作原理以及它与您可能使用过的其他关系数据库管理系统的不同之处。
使用 PostgreSQL 角色和数据库
默认情况下,Postgres 使用称为角色的概念来处理身份验证和授权。 这些在某些方面类似于常规的 Unix 风格的帐户,但 Postgres 不区分用户和组,而是更喜欢更灵活的术语“角色”。
安装后,Postgres 设置为使用对等身份验证,这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户相关联。 如果 Postgres 中存在角色,则具有相同名称的 Unix/Linux 用户名可以作为该角色登录。
安装过程创建了一个名为 postgres 的用户帐户,该帐户与默认的 Postgres 角色相关联。 为了使用 Postgres,您可以登录该帐户。
有几种方法可以使用此帐户访问 Postgres。
切换到 postgres 帐户
通过键入以下内容切换到服务器上的 postgres 帐户:
sudo -i -u postgres
您现在可以通过键入以下内容立即访问 PostgreSQL 提示符:
psql
从那里您可以根据需要自由地与数据库管理系统进行交互。
通过键入以下内容退出 PostgreSQL 提示符:
\q
这会将您带回 postgres Linux 用户的命令行。
在不切换帐户的情况下访问 Postgres 命令行
您也可以直接使用 sudo 使用 postgres 帐户运行您想要的命令。
例如,在最后一个示例中,您被指示通过首先切换到 postgres 用户然后运行 psql 打开 Postgres 提示符来进入 Postgres 提示符。 您可以通过以 postgres 用户身份使用 sudo 运行单个命令 psql 来一步完成此操作,如下所示:
sudo -u postgres psql
这将使您直接登录到 Postgres,而无需中间的 bash shell。
同样,您可以通过键入以下命令退出交互式 Postgres 会话:
\q
许多用例需要多个 Postgres 角色。 继续阅读下文以了解如何配置这些。
创建新角色
目前,您在数据库中配置了 postgres 角色。 您可以使用 createuser 命令从命令行创建新角色。 –interactive 标志将提示您输入新角色的名称,并询问它是否应该具有超级用户权限。
如果您以 postgres 帐户登录,则可以通过键入以下内容来创建新用户:
createuser --interactive
相反,如果您更喜欢在不从普通帐户切换的情况下对每个命令使用 sudo,请键入:
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 createuser
您安装的 Postgres 现在有了一个新用户,但您还没有添加任何数据库。 下一节将描述这个过程。
为角色设置登录密码:
alter role sammy with password 'sammy123';
创建数据库
Postgres 身份验证系统默认做出的另一个假设是,对于用于登录的任何角色,该角色将拥有一个它可以访问的同名数据库。
这意味着如果您在上一节中创建的用户名为 sammy,则默认情况下该角色将尝试连接到也称为“sammy”的数据库。 您可以使用 createdb 命令创建适当的数据库。
如果您以 postgres 帐户登录,您将键入如下内容:
createdb sammy
相反,如果您更喜欢在不从普通帐户切换的情况下对每个命令使用 sudo,您可以键入:
sudo -u postgres createdb sammy
这种灵活性为根据需要创建数据库提供了多种途径。
使用新角色打开 Postgres命令行
要使用对等身份验证登录,您需要一个与您的 Postgres 角色和数据库同名的 Linux 用户。
如果没有可用的匹配 Linux 用户,可以使用 adduser 命令创建一个。 您必须从具有 sudo 权限的非根帐户执行此操作(意思是,不是以 postgres 用户身份登录):
sudo adduser sammy
一旦这个新帐户可用,您可以通过键入以下内容切换并连接到数据库:
sudo -i -u sammy
psql
或者你也可以:
sudo -u sammy psql
假设所有组件都已正确配置,此命令将自动让您登录。
如果您希望您的用户连接到不同的数据库,您可以通过如下指定数据库来实现:
psql -d postgres
登录后,您可以通过键入以下内容来检查当前的连接信息:
\conninfo
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
如果您连接到非默认数据库或非默认用户,这将很有用。
创建和删除表
现在您知道如何连接到 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)
);
此命令为表命名,然后定义列以及列类型和字段数据的最大长度。 或者,您可以为每一列添加约束。
出于演示目的,创建下表:
CREATE TABLE playground (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
install_date date
);
此命令将创建一个表,用于清点游乐场设备。 表中的第一列将保存序列类型的设备 ID 号,它是一个自动递增的整数。 此列还具有 PRIMARY KEY 的约束,这意味着其中的值必须是唯一的且不能为空。
接下来的两行分别为设备类型和颜色创建列,它们都不能为空。 这些之后的行创建了一个位置列,其约束要求值是八个可能值之一。 最后一行创建一个日期列,记录您安装设备的日期。
对于其中两列(equip_id 和 install_date),该命令未指定字段长度。 这样做的原因是某些数据类型不需要设置长度,因为长度或格式是隐含的。
通过键入以下内容检查您的新表:
\d
得到:
Output
List of relations
Schema | Name | Type | Owner
--------+-------------------------+----------+-------
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)
你的 playground 表在这里,但还有一个叫做 playground_equip_id_seq 的东西,它是序列类型的。 这是您为 equip_id 列提供的序列类型的表示。 这会跟踪序列中的下一个数字,并为此类列自动创建。
如果只想查看没有序列的表,可以键入:
\dt
Output
List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
准备好表格后,让我们用它来练习管理数据。
在表中新增、查询和删除数据
现在您有了一个表,您可以向其中插入一些数据。 例如,通过调用要添加到的表、命名列然后为每一列提供数据来添加幻灯片和秋千,如下所示:
INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
输入数据时应小心,以避免出现一些常见的挂断。 其一,不要将列名用引号引起来,但您输入的列值确实需要引号。
另一件要记住的事情是您没有为 equip_id 列输入值。 这是因为每当您向表中添加新行时,它都会自动生成。
通过键入以下内容检索您添加的信息:
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 已成功填写,并且所有其他数据已正确组织。
如果 playground 上的幻灯片坏了而你必须将其删除,你也可以通过键入以下内容从表格中删除该行:
DELETE FROM playground WHERE type = 'slide';
再次查表:
SELECT * FROM playground;
得到:
Output
equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
请注意,幻灯片行不再是表格的一部分。
从表中新增和删除列
创建表后,您可以通过添加或删除列来修改它。 通过键入以下内容添加一列以显示每台设备的最后一次维护访问:
ALTER TABLE playground ADD last_maint date;
再次查看您的表信息。 已添加新列但未输入任何数据:
SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)
如果您发现您的工作人员使用单独的工具来跟踪维护历史记录,您可以通过键入以下内容来删除该列:
ALTER TABLE playground DROP last_maint;
这将删除 last_maint 列和其中找到的任何值,但保留所有其他数据不变。
更新表中的数据
到目前为止,您已经学习了如何向表中添加记录以及如何删除它们,但本教程尚未涵盖如何修改现有条目。
您可以通过查询所需的记录并将列设置为您希望使用的值来更新现有条目的值。 您可以查询挥杆记录(这将匹配您表中的每个挥杆)并将其颜色更改为红色。 如果您给秋千套装涂漆,这可能会有用:
UPDATE playground SET color = 'red' WHERE type = 'swing';
您可以通过再次查询数据来验证操作是否成功:
SELECT * FROM playground;
Output
equip_id | type | color | location | install_date
----------+-------+-------+-----------+--------------
2 | swing | red | northwest | 2018-08-16
(1 row)
该幻灯片现在注册为红色。
结论
您现在已在 Ubuntu 22.04 服务器上设置了 PostgreSQL。
本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://lrting.top/backend/14141/