介绍
Relational database management systems是许多网站和应用程序的关键组成部分,它们提供一个结构化的存储,组织和访问信息的方式。
PostgreSQL,或Postgres,是一个关系式数据库管理系统,提供 SQL 查询语言的实现,它是许多小型和大型项目的受欢迎选择,具有符合标准的优势(https://www.postgresql.org/docs/current/features.html)和许多先进的功能,如 可靠的交易和 无读锁的竞争。
在本指南中,您将在 CentOS 7 服务器上安装 Postgres,并通过一些基本的方法来使用它。
前提条件
要跟随这个教程,你需要:
一个 CentOS 7 服务器是通过遵循我们的 初始服务器设置与 CentOS 7指南和我们的 新 CentOS 7 服务器的附加推荐步骤教程,包括具有 sudo 特权的非根用户和设置 firewalld 的防火墙。
- 若要设置 firewalld,请遵循教程的 新 CentOS 7 服务器的附加推荐步骤部分。
- 数据库可能特别容易受到系统时间变化的影响,如果它们非常活跃,并且在内部记录上有时间戳。
第1步:安装PostgreSQL
Postgres 可以使用默认的 CentOS 存储库进行安装,但从本教程的写作开始,在 CentOS 7 Base 存储库中可用的版本已经过时,因此,本教程将使用官方的 Postgres 存储库。
在您继续设置新的存储库之前,请从 CentOS-Base 存储库中排除对 postgresql
包的搜索,否则,依赖可能会解决由基础存储库提供的 postgresql
。
使用您喜爱的文本编辑器打开存储库配置文件. 本教程将使用‘vim’:
1sudo vi /etc/yum.repos.d/CentOS-Base.repo
查找[base]
和[updates]
部分,按i
进入插入模式,并在两个部分中插入exclude=postgresql*
行。
1[label /etc/yum.repos.d/CentOS-Base.repo]
2...
3[base]
4name=CentOS-$releasever - Base
5mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
6#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
7gpgcheck=1
8gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
9
10exclude=postgresql*
11
12#released updates
13[updates]
14name=CentOS-$releasever - Updates
15mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
16#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
17gpgcheck=1
18gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
19exclude=postgresql*
20...
完成后,请按ESC
来离开插入模式,然后按:wq
和ENTER
来保存和退出文件. 有关文本编辑器 vi 及其继任者 vim 的更多信息,请参阅我们的 在云服务器上安装和使用 Vim 文本编辑器教程。
现在,使用 CentOS 的官方 PostgreSQL 存储库安装一个存储库配置包:
1sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
给出提示时,用y
确认安装。
PostgreSQL 存储库包含所有可用的 PostgreSQL 版本的信息,您可以使用以下命令查看所有可用的包和版本:
1yum list postgresql*
选择并安装所需的 PostgreSQL 版本. 在本指南中,您将使用 PostgreSQL 11 版本。
要安装 PostgreSQL 服务器,请使用以下命令:
1sudo yum install postgresql11-server
在安装过程中,您将被要求导入 GPG 密钥,如下:
1...
2Importing GPG key 0x442DF0F8:
3 Userid : "PostgreSQL RPM Building Project <[email protected]>"
4 Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
5 Package : pgdg-redhat-repo-42.0-5.noarch (installed)
6 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
7Is this ok [y/N]:
用y
来确认,以便安装完成。
现在软件已安装,您将执行一些初始化步骤,为 PostgreSQL 准备一个新的数据库集群。
步骤 2 — 创建一个新的 PostgreSQL 数据库集群
您必须创建一个新的 PostgreSQL 数据库集群,才能使用您的 Postgres 数据库。 数据库集群是由单个服务器实例管理的数据库集合。 创建数据库集群包括创建数据库数据库将被放置的目录,生成共享目录表,并创建template1
和postgres
数据库。
创建一个新数据库需要使用 template1
数据库。在创建时,所有存储在该数据库中的内容都将被放置在新数据库中。
使用initdb
创建一个新的 PostgreSQL 数据库集群:
1sudo /usr/pgsql-11/bin/postgresql-11-setup initdb
您将看到以下结果:
1[secondary_label Output]
2Initializing database ... OK
现在开始并启用 PostgreSQL 使用 systemctl
:
1sudo systemctl start postgresql-11
2sudo systemctl enable postgresql-11
将产生以下产出
1[secondary_label Output]
2Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.
现在PostgreSQL正在运行,您将使用角色来了解Postgres是如何工作的,以及它如何与您过去可能使用的类似数据库管理系统不同。
步骤 3 – 使用 PostgreSQL 角色和数据库
默认情况下,Postgres使用一个名为 roles 的概念来处理身份验证和授权,这些在某些方面类似于常规的Unix类型帐户,但Postgres不区分用户和组,而是更喜欢更灵活的术语角色。
在安装时,Postgres设置为使用 ident 身份验证,这意味着它将Postgres 角色与匹配的 Unix/Linux 系统帐户相关联。
安装过程创建了一个名为 postgres 的用户帐户,与默认的 Postgres 角色相关联。
有几种方法可以使用此帐户访问 Postgres。
转到 postgres 帐户
在您的服务器上切换到 postgres 帐户,键入:
1sudo -i -u postgres
您现在可以通过键入立即访问 Postgres 提示:
1psql
这会让你登录到PostgreSQL提示,从这里你可以立即与数据库管理系统互动。
退出 PostgreSQL 提示通过键入:
1\q
这会让你回到 Linux 命令提示 postgres . 现在回到你的原始 sudo 帐户,如下:
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命令,以创建用户根据您的规格。
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 索引
要使用基于ident
的身份验证登录,您需要一个与您的 Postgres 角色和数据库相同的 Linux 用户。
如果你没有一个匹配的Linux用户可用,你可以创建一个用adduser
命令. 你将不得不从你的非root 帐户与sudo
特权(即,没有登录作为 ** postgres** 用户):
1sudo adduser sammy
一旦这个新帐户可用,您可以通过键入切换并连接到数据库:
1sudo -i -u sammy
2psql
或者,你可以做这个内线:
1sudo -u sammy psql
这个命令会自动登录你。
如果您希望您的用户连接到不同的数据库,则可以通过这样指定数据库:
1psql -d postgres
一旦登录,您可以通过键入检查当前连接信息:
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);
这些命令给表一个名称,然后定义列以及列类型和域数据的最大长度。
您可以在我们的 如何在云服务器上创建,删除和管理 PostgreSQL 表教程中了解更多。
为了演示目的,创建一个简单的表,如下:
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开始,这是序列
类型。这个数据类型是一个自动增加的整数。你还给了这个列主要密钥
的限制,这意味着值必须是唯一的,而不是零。
对于两个列(‘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)
正如您所看到的,您的幻灯片现在注册为红色。
结论
现在你已经在你的 CentOS 7 服务器上设置了 PostgreSQL。但是,在 Postgres 中还有很多东西要学习。 以下是关于如何使用 Postgres 的更多指南: