分类
文章

如何在CentOS 7上安装和使用PostgreSQL

介绍

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

PostgreSQL或Postgres是一种关系数据库管理系统,提供SQL查询语言的实现。它是许多小型和大型项目的流行选择,它的优点是符合标准,并具有许多高级功能,例如可靠的事务并发,而没有读锁

在本指南中,您将在CentOS 7服务器上安装Postgres,并介绍一些使用它的基本方法。

先决条件

要遵循本教程,您将需要:

步骤1-安装PostgreSQL

可以使用默认的CentOS存储库安装Postgres。但是,在撰写本教程时,CentOS 7 Base存储库中可用的版本已过时。因此,本教程将使用官方的Postgres存储库。

在继续建立新的资料库之前,请postgresql从CentOS-Base资料库中搜索对软件包的搜索。否则,依赖项可能会解析为postgresql基础存储库提供的依赖项。

使用首选的文本编辑器打开存储库配置文件。本教程将使用vim

  • sudo vi /etc/yum.repos.d/CentOS-Base.repo

找到[base][updates]部分,按进入插入模式i,然后exclude=postgresql*在两部分中插入行。因此,您的文件将如下所示,并突出显示新行:

/etc/yum.repos.d/CentOS-Base.repo
...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

exclude=postgresql*

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*
...

完成后,按ESC退出插入模式,然后按:wqENTER保存并退出文件。要了解有关文本编辑器vi及其后续vim的更多信息,请查看我们在Cloud Server上安装和使用Vim文本编辑器的教程。

现在,使用用于CentOS的官方PostgreSQL存储库安装存储库配置软件包:

  • sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

出现提示时,请通过确认安装y

PostgreSQL存储库包含所有可用PostgreSQL版本的信息。您可以使用以下命令查看所有可用的软件包和版本:

  • yum list postgresql*

选择并安装所需的PostgreSQL版本。在本指南中,您将使用PostgreSQL 11版本。

要安装PostgreSQL服务器,请使用以下命令:

  • sudo yum install postgresql11-server

在安装过程中,系统将询问您有关如何导入GPG密钥的提示,如下所示:

...
Importing GPG key 0x442DF0F8:
 Userid     : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>"
 Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
 Package    : pgdg-redhat-repo-42.0-5.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]:

进行确认,以y完成安装。

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

步骤2-创建新的PostgreSQL数据库集群

您必须先创建一个新的PostgreSQL数据库集群,然后才能使用Postgres数据库。数据库集群是由单个服务器实例管理的数据库的集合。创建数据库集群包括创建将在其中放置数据库数据的目录,生成共享目录表以及创建template1postgres数据库。

template1数据库是创建新数据库所必需的。创建时,其中存储的所有内容都将放置在新数据库中。一个postgres数据库是专为用户,实用程序和第三方应用程序使用一个默认的数据库。

使用以下命令创建一个新的PostgreSQL数据库集群initdb

  • sudo /usr/pgsql-11/bin/postgresql-11-setup initdb

您将看到以下输出:

Output
Initializing database ... OK

现在使用systemctl以下命令启动并启用PostgreSQL :

  • sudo systemctl start postgresql-11
  • sudo systemctl enable postgresql-11

这将给出以下输出

Output
Created 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使用称为角色的概念来处理身份验证和授权。从某种意义上讲,它们类似于常规的Unix风格的帐户,但是Postgres不区分用户和组,而是喜欢使用更灵活的术语角色。

安装后,Postgres设置为使用身份验证,这意味着它将Postgres角色与匹配的Unix / Linux系统帐户相关联。如果Postgres中存在角色,则具有相同名称的Unix / Linux用户名可以作为该角色登录。

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

有几种方法可以使用该帐户访问Postgres。

切换到postgres帐户

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

  • sudo -i -u postgres

现在,您可以通过键入以下内容立即访问Postgres提示符:

  • psql

这将使您登录到PostgreSQL提示符,从这里您可以立即与数据库管理系统进行交互。

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

  • \q

这将带您回到postgresLinux命令提示符。现在,使用以下命令返回您的原始sudo帐户:

  • exit
在不切换帐户的情况下访问Postgres提示

您还可以postgres直接通过使用帐户运行所需的命令sudo

例如,在最后一个示例中,通过先切换到postgres用户然后运行psql以打开Postgres提示符,指示您进入Postgres提示符。您可以一步一步地执行此操作,方法psql是以的postgres用户身份运行单个命令sudo,如下所示:

  • sudo -u postgres psql

这将使您直接登录到Postgres,而不需要中介程序bash外壳。

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

  • \q

在此步骤中,您使用该postgres帐户到达psql提示。但是许多用例需要多个Postgres角色。继续阅读以了解如何配置新角色。

步骤4-创建新角色

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

如果您以帐户身份登录,则postgres可以通过键入以下内容来创建新用户:

  • createuser --interactive

相反,如果您希望在sudo不从普通帐户切换的情况下使用每个命令,请键入:

  • sudo -u postgres createuser --interactive

该脚本将提示您一些选择,并根据您的响应,执行正确的Postgres命令以创建符合您要求的用户。在本教程中,创建一个sammy用户并赋予其超级用户特权:

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

您可以通过传递一些其他标志来获得更多控制。通过查看man页面来检查选项:

  • man createuser

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

步骤5 —创建一个新数据库

默认情况下,Postgres身份验证系统所做的另一个假设是,对于用于登录的任何角色,该角色将拥有一个其名称可以访问的数据库。

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

如果您以该postgres帐户身份登录,则输入以下内容:

  • createdb sammy

相反,如果您希望在sudo不从普通帐户切换的情况下使用每个命令,则应输入:

  • sudo -u postgres createdb sammy

这种灵活性提供了用于根据需要创建数据库的多种路径。

现在,您已经创建了一个新数据库,您将以新角色登录到该数据库。

步骤6-使用新角色打开Postgres提示

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

如果没有可用的匹配Linux用户,则可以使用以下adduser命令创建一个。您必须root使用具有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".

如果您要连接到非默认数据库或使用非默认用户,这将很有用。

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

步骤7 —创建和删除表

现在您知道如何连接到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)
);

这些命令为表命名,然后定义列以及列类型和字段数据的最大长度。您还可以选择为每列添加表约束。

您可以在Cloud Server教程的PostgreSQL中如何创建,删除和管理表中了解更多信息。

出于演示目的,创建一个简单的表,如下所示:

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
);

这些命令将创建一个表,该表会列出游乐场设备。这从serial类型的设备ID开始。此数据类型是自动递增的整数。您还为该列设置了的约束primary key,这意味着这些值必须唯一且不能为null。

对于其中两列(equip_idinstall_date),这些命令未指定字段长度。这是因为某些列类型不需要设置长度,因为该长度由类型隐含。

接下来的两个命令的设备创建列typecolor分别,其中每一个可以不为空。这些之后的命令创建一location列和一个约束,该约束和约束要求该值是八个可能值之一。最后一条命令创建一个date列,该列记录安装设备的日期。

您可以通过键入以下内容查看新表格:

  • \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。这是serial您为equip_id列指定的类型的表示。这会跟踪序列中的下一个数字,并且会自动为此类型的列创建。

如果只想查看不带序列的表,则可以键入:

  • \dt

这将产生以下结果:

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

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

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

现在您有了一个表,可以在其中插入一些数据。

例如,通过调用要添加到的表,命名列,然后为每一列提供数据来添加幻灯片和秋千,如下所示:

  • 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已成功填写您的姓名,并且所有其他数据都已正确组织。

如果操场上的幻灯片折断了并且您必须将其删除,则还可以通过键入以下内容从表格中删除该行:

  • 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)

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

现在,您已经在表中添加和删除了整体,现在可以尝试添加和删除列。

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

创建表后,可以对其进行修改以添加或删除列。通过输入以下内容以添加列以显示每台设备的最后一次维护访问:

  • 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列及其中找到的所有值,但保留所有其他数据不变。

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

步骤10 —更新表中的数据

到目前为止,您已经了解了如何向表中添加记录以及如何删除记录,但是本教程尚未介绍如何修改现有条目。

您可以通过查询所需记录并将列设置为希望使用的值来更新现有条目的值。您可以查询swing记录(这将匹配表中的每个挥杆动作)并将其颜色更改为red

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

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

  • SELECT * FROM playground;

您将看到以下内容:

Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16 (1 row)

如您所见,您的幻灯片现已注册为红色。

结论

现在,您已经在CentOS 7服务器上设置了PostgreSQL。但是,Postgres还有很多要学习的东西。以下是一些其他指南,介绍了如何使用Postgres:

发表评论

电子邮件地址不会被公开。 必填项已用*标注