介绍
关系数据库管理系统是许多网站和应用程序的一个关键组件。 它们提供了一种结构化的方式来存储,组织和访问信息。
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
你会被要求输入普通用户密码,然后将获得的shell提示符postgres
用户。
您可以通过键入以下内容立即获得Postgres提示:
psql
您将被自动登录,并且将能够立即与数据库管理系统交互。
但是,我们将解释一下如何使用其他角色和数据库,以便您可以灵活地确定要使用的用户和数据库。
键入以下命令退出PostgreSQL提示符:
\q
您现在应该回到postgres
用户命令提示符。
创建新角色
从postgres
Linux的帐户,您必须登录到数据库系统中的能力。 但是,我们还将演示如何创建其他角色。 在postgres
Linux的帐户,正在与Postgres的管理角色相关联的,已获得一些实用程序来创建用户和数据库。
我们可以通过键入以下内容创建新角色:
createuser --interactive
这基本上是一个交互式shell脚本,它调用正确的Postgres命令为您的规范创建一个用户。 它只会问你两个问题:角色的名称和它是否应该是超级用户。 你可以通过传递一些额外的标志来获得更多的控制。 通过查看检查出的选项man
页:
man createuser
创建新数据库
默认情况下设置Postgres的方式(对匹配系统帐户请求的角色进行身份验证)也假设存在一个匹配的数据库以供角色连接到。
所以,如果我有一个名为用户test1
,该角色将尝试连接到一个数据库名为test1
默认。
你可以通过简单地调用这个命令的创建相应的数据库postgres
用户:
createdb test1
用新用户连接到Postgres
让我们假设你有一个名为Linux系统帐户test1
(你可以创建一个通过键入: sudo adduser test1
),并且您已经创建了一个Postgres角色和数据库也被称为test1
。
您可以通过键入以下内容切换到Linux系统帐户:
sudo -i -u test1
然后,您可以连接到test1
数据库作为test1
通过打字的Postgres角色:
psql
这将自动登录,假设所有组件都已配置。
如果你希望你的用户能够连接到不同的数据库,可以通过指定这样的数据库(确保你这样做\q
到命令提示符):
psql -d postgres
您可以通过键入以下内容获取有关您登录的Postgres用户和当前连接到的数据库的信息:
\conninfo
Output: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)
);
正如你所看到的,我们给表一个名字,然后定义我们想要的列,以及字段数据的列类型和最大长度。 我们还可以选择为每个列添加表约束。
您可以了解更多关于如何创建和管理的Postgres表在这里。
为了我们的目的,我们将创建一个简单的表如下:
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,这是的serial
类型。 此数据类型是自动递增的整数。 我们已经给此列的约束primary key
,这意味着该值必须是唯一的,而不是空。
对于我们的两个列,我们没有给出字段长度。 这是因为一些列类型不需要设置长度,因为长度由类型隐含。
然后我们给出设备类型和颜色的列,每列不能为空。 然后,我们创建一个位置列,并创建一个约束,要求该值为八个可能的值之一。 最后一列是记录我们安装设备的日期的日期列。
通过键入以下内容我们可以看到我们的新表:
\d
Output: 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
Output: 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;
Output: 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;
Output: 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;
Output: equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2010-08-16 |
(1 row)
我们可以轻松删除列。 如果我们发现我们的工作人员使用单独的工具来跟踪维护历史记录,我们可以通过键入以下内容删除该列:
ALTER TABLE playground DROP 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 | 2010-08-16
(1 row)
如您所见,我们的幻灯片现在注册为红色。
结论
您现在已在您的CentOS 7服务器上设置PostgreSQL。 但是,仍然有很多东西要学用Postgres的。 虽然其中许多是写在Ubuntu的头脑,这些教程应该有助于更多地了解PostgreSQL: