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

介绍

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

PostgreSQL或Postgres是一个关系数据库管理系统,它使SQL查询语言的得到了实现。它是许多小型和大型项目的流行选择,并且具有符合标准并具有许多高级功能(如可靠事务和并发性而无需读锁定)的优点。

在本指南中,我们将演示如何在CentOS 7上安装Postgres并介绍一些使用它的基本方法。

教程准备

要学习本教程,您需要:

安装

CentOS的默认存储库包含Postgres软件包,因此我们可以使用yum软件包系统轻松安装它们。

安装postgresql-server软件包和“contrib”软件包,它增加了一些额外的实用程序和功能:

sudo yum install postgresql-server postgresql-contrib

接受提示,通过y来进行回复。

既然已经安装了我们的软件,我们必须先执行几个步骤才能使用它。

创建一个新的PostgreSQL数据库集群:

sudo postgresql-setup initdb

默认情况下,PostgreSQL不允许密码验证。我们将通过编辑其基于主机的身份验证(HBA)配置来更改它。

使用您喜欢的文本编辑器打开HBA配置。我们将使用vi:

sudo vi /var/lib/pgsql/data/pg_hba.conf

在文件底部附近找到看起来像这样的行:

host    all             all             127.0.0.1/32            ident
host    all             all             ::1/128                 ident

然后将“ident”替换为“md5”,所以它们看起来像这样:

host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

保存并退出。PostgreSQL现在配置为允许密码验证。

现在启动并启用PostgreSQL:

sudo systemctl start postgresql
sudo systemctl enable postgresql

PostgreSQL现在可以使用了。我们可以了解它的工作原理以及它与您可能使用的类似数据库管理系统的不同之处。

使用PostgreSQL角色和数据库

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

安装后,Postgres设置为使用“ident”身份验证,这意味着它将Postgres角色与匹配的Unix / Linux系统帐户相关联。如果存在Postgres角色,则可以通过登录关联的Linux系统帐户登录。

安装过程创建了一个名为postgres的用户帐户,该账户与默认Postgres角色关联。为了使用Postgres,我们需要登录该帐户。您可以通过键入以下内容来执行:

sudo -i -u postgres

系统将要求您输入正常的用户密码,然后为postgres用户提供shell提示符。

您可以输入以下内容立即获得Postgres提示:

psql

您将自动登录,并能够立即与数据库管理系统进行交互。

但是,我们将稍微解释一下如何使用其他角色和数据库,以便您可以灵活选择要使用的用户和数据库。

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

\q

您现在应该返回postgres用户命令提示符。

创建一个新角色

postgresLinux帐户,您可以登录数据库系统。但是,我们还将演示如何创建其他角色。与Postgres管理角色关联的 postgres Linux帐户可以访问一些实用程序来创建用户和数据库。

我们可以输入以下内容来创建新角色:

createuser --interactive

这基本上是一个交互式shell脚本,它调用正确的Postgres命令来根据您的规范创建用户。它只会问你两个问题:角色的名称以及它是否应该是超级用户。您可以通过传递一些额外的标志来获得更多控制。查看man页面查看选项:

man createuser

创建一个新数据库

Postgres默认设置的方式(验证匹配系统帐户请求的角色)也假设存在匹配的数据库以供角色连接。

因此,如果我有一个被调用的用户test1,该角色将尝试连接到test1默认调用的数据库。

您只需以postgres用户身份调用此命令即可创建相应的数据库:

createdb test1

使用新用户连接到Postgres

假设您有一个名为test1的Linux系统帐户(您可以通过键入sudo adduser test1来创建一个帐户),并且您已经创建了一个名字也为test1的Postgres角色和数据库。

您可以键入以下命令更改为Linux系统帐户:

sudo -i -u test1

然后,您可以键入以下内容来以test1Postgres的角色连接到test1数据库:

psql

这将自动登录,假设已配置所有组件。

如果您希望用户连接到其他数据库,可以通过指定这样的数据库来执行此操作(确保您使用\q命令提示符):

psql -d postgres

您可以通过键入以下内容获取有关您已登录的Postgres用户以及您当前连接的数据库的信息:

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

如果要连接到非默认数据库或非默认用户,这可以帮助提醒您当前的设置。

创建和删除表

既然您已经知道如何连接到PostgreSQL数据库系统,我们将开始讨论如何完成一些基本任务。

首先,让我们创建一个表来存储一些数据。让我们创建一个描述游乐场设备的表格。

此命令的基本语法如下:

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

我们制作了一个操场桌,可以清点我们拥有的设备。这从serial类型的设备ID开始。此数据类型是自动递增整数。我们给这个列赋予了primary key的约束,这意味着值必须是唯一的而不是null。

对于我们的两个列,我们没有给出字段长度。这是因为某些列类型不需要设置长度,因为类型隐含了长度。

然后我们给出设备类型和颜色的列,每个列都不能为空。然后,我们创建一个位置列并创建一个约束,该约束要求该值为八个可能值之一。最后一列是日期列,记录我们安装设备的日期。

我们可以通过键入以下内容来查看新表:

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

正如你所看到的,我们有我们的操场表,但我们也有一些所谓playground_equip_id_seq,这是属于sequence类型的。这是我们为equip_id列提供的“序列”类型的表示。这将跟踪序列中的下一个数字。

如果您只想查看表格,可以输入:

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

在表中添加,查询和删除数据

现在我们已经创建了一个表,我们可以在其中插入一些数据。

让我们添加一张幻灯片和一个秋千。我们通过调用我们想要添加的表,命名列然后为每列提供数据来完成此操作。我们的幻灯片和秋千可以添加如下:

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

你应该注意到一些事情。首先,请记住不应引用列名,但是您输入的列确实需要引号。

要记住的另一件事是我们不输入equip_id列的值。这是因为只要创建表中的新行,就会自动生成此项。

然后我们可以通过输入以下内容来获取我们添加的信息:

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

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

如果我们的幻灯片断开并将其从操场上移除,我们还可以通过键入以下内容从表中删除该行:

DELETE FROM playground WHERE type = 'slide';

如果我们再次查询我们的表格,我们将看到我们的幻灯片不再是表格的一部分:

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

如何从表中添加和删除列

如果我们想在创建表之后修改表以添加其他列,我们可以轻松地执行此操作。

我们可以通过输入以下内容添加一列来显示每件设备的上次维护访问:

ALTER TABLE playground ADD last_maint date;

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

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

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

ALTER TABLE playground DROP last_maint;

如何更新表中的数据

我们知道如何向表中添加记录以及如何删除它们,但我们还没有介绍如何修改现有条目。

您可以通过查询所需的记录并将列设置为您要使用的值来更新现有条目的值。我们可以查询“swing”记录(这将匹配我们表中的每个 swing)并将其颜色更改为“red”。如果我们给它一个绘画工作,这可能是有用的:

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

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

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

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

结论

您现在在CentOS 7服务器上设置了PostgreSQL。但是,Postgres 还有很多东西需要学习。虽然其中许多都是用Ubuntu编写的,但这些教程应该有助于学习更多有关PostgreSQL的知识。

更多CentOS教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Use PostgreSQL on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从ORACLE起航,领略精彩的IT技术。

测试修改gcs_server_processes参数

35050
来自专栏耕耘实录

Zabbix最佳实践一:Zabbix4.0.2的安装与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

81530
来自专栏乐沙弥的世界

Percona XtraDB Cluster Strict Mode(PXC 5.7)

在Percona XtraDB Cluster集群架构中,为了避免多主节点导致的数据异常,或者说一些不被支持的特性引发的数据不一致的情形,PXC集群可以通过配置...

16320
来自专栏Java3y

Mysql免安装配置教程(图文版)

Mysql免安装版配置教程 图文版 配置环境变量 ? 新建一个my.ini文件,添加下面内容 [mysqld] basedir=C:\\soft...

39450
来自专栏散尽浮华

Mysql优化系列(0)--总结性梳理

对于一个网站来说,在运行很长一段时间后,数据库瓶颈问题会越来越暴露出来。作为运维人员,对数据库做必要的优化十分重要! 下面总结以往查阅到的以及自己工作中的一些优...

22580
来自专栏小特工作室

Navi.Soft31.代码生成器(含下载地址)

1系统简介 1.1功能简述 在Net软件开发过程中,大部分时间都是在编写代码,并且都是重复和冗杂的代码.比如:要实现在数据库中10个表的增删改查功能,大部分代码...

23290
来自专栏程序猿

MySQL的匿名账户安全

在windows中MySql以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动。而Linux中启动时...

42370
来自专栏张秀云的专栏

MySQL 压缩解决方案(一)

本文描述 mysql 压缩的使用场景和解决方案,包括压缩传输协议、压缩列解决方案和压缩表解决方案。

3.3K10
来自专栏数据和云

DB2 Vs MySQL系列 | 体系架构对比

前些日子,我们做了DB2 VS MySQL的数据类型的对比,今天我们将体系架构的对比分享给大家,让大家对这两类数据库有更深刻的认识。 ? DB2体系结构 ? ?...

33450
来自专栏云计算教程系列

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

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

81410

扫码关注云+社区

领取腾讯云代金券