介绍
关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种结构化的方式来存储、组织和访问信息。
PostgreSQL,或者简称为 Postgres,是一种关系数据库管理系统,提供了对 SQL 查询语言的实现。它是许多小型和大型项目的热门选择,并且具有符合标准和许多高级功能的优势,如可靠的事务和并发性而无需读取锁定。
在本指南中,我们将演示如何在 Ubuntu 14.04 VPS 实例上安装 Postgres,并介绍一些基本的使用方法。
安装
Ubuntu 的默认软件仓库包含了 Postgres 软件包,因此我们可以使用 apt
软件包管理系统轻松安装它们。
由于我们最近没有更新本地的 apt 软件仓库,让我们现在进行更新。然后我们可以获取 Postgres 软件包和一个“contrib”软件包,它添加了一些额外的实用工具和功能:
sudo apt-get update sudo apt-get install postgresql postgresql-contrib
现在我们的软件已安装完成,我们可以了解它的工作原理以及它与您可能使用过的类似数据库管理系统有何不同。
使用 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
Linux 命令提示符。
创建新角色
从 postgres
Linux 帐户,您有能力登录到数据库系统。但是,我们还将演示如何创建其他角色。与 Postgres 管理角色相关联的 postgres
Linux 帐户可以访问一些实用程序来创建用户和数据库。
您可以通过输入以下命令来创建新角色:
createuser --interactive
这基本上是一个交互式的 shell 脚本,调用正确的 Postgres 命令来根据您的规格创建用户。它只会问您两个问题:角色的名称以及是否应该是超级用户。通过查看 man
页面,您可以通过传递一些额外的标志来获得更多控制:
man createuser
创建新数据库
Postgres 默认设置的方式(通过匹配系统帐户请求的认证角色)还假设将存在一个匹配的数据库供角色连接。
因此,如果我有一个名为 test1
的用户,该角色将默认尝试连接到名为 test1
的数据库。
您可以通过以下命令作为 postgres
用户创建适当的数据库:
createdb test1
使用新用户连接到 Postgres
假设您有一个名为 test1
的 Linux 系统帐户(您可以通过输入 adduser test1
来创建一个),并且您还创建了一个名为 test1
的 Postgres 角色和数据库。
您可以通过输入以下命令切换到 Linux 系统帐户:
sudo -i -u test1
然后,您可以通过输入以下命令作为 test1
Postgres 角色连接到 test1
数据库:
psql
假设所有组件都已配置好,这将自动登录。
如果您希望您的用户连接到不同的数据库,可以通过以下方式指定数据库:
psql -d postgres
通过输入以下命令,您可以获取有关您当前登录的 Postgres 用户和当前连接的数据库的信息:
\conninfo
这可以帮助您在连接到非默认数据库或使用非默认用户时提醒您当前的设置。
创建和删除表格
现在您已经知道如何连接到 PostgreSQL 数据库系统,我们将开始介绍如何完成一些基本任务。
首先,让我们创建一个表来存储一些数据。让我们创建一个描述游乐场设备的表。
这个命令的基本语法如下:
CREATE TABLE <span class="highlight">table_name</span> ( <span class="highlight">column_name1</span> <span class="highlight">col_type</span> (<span class="highlight">field_length</span>) <span class="highlight">column_constraints</span>, <span class="highlight">column_name2</span> <span class="highlight">col_type</span> (<span class="highlight">field_length</span>), <span class="highlight">column_name3</span> <span class="highlight">col_type</span> (<span class="highlight">field_length</span>) );
如您所见,我们给表格命名,然后定义我们想要的列,以及列类型和字段数据的最大长度。我们还可以为每个列选择性地添加表格约束。
您可以在此处了解有关如何在 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
您会看到,我们有我们的游乐场表,但我们还有一个名为 playground_equip_id_seq
的东西,它是 sequence
类型。这是我们给 equip_id
列的 “serial” 类型的表示。这跟踪了序列中的下一个数字。
如果您只想看到表格,可以输入:
\dt
向表格中添加、查询和删除数据
现在我们已经创建了一个表格,我们可以向其中插入一些数据。
让我们添加一个滑梯和一个秋千。我们通过调用我们想要添加的表格,命名列,然后为每个列提供数据来完成这个操作。我们可以像这样添加我们的滑梯和秋千:
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
已经成功填充,而且我们的其他所有数据都已经正确组织。
如果我们的滑梯坏了并且我们将其从游乐场中移除,我们也可以通过输入以下命令从我们的表格中删除该行:
DELETE FROM playground WHERE type = 'slide';
如果我们再次查询我们的表格,我们将看到我们的滑梯不再是表格的一部分:
SELECT * FROM playground;
如何向表中添加和删除列
如果我们想在创建表后修改它以添加额外的列,我们可以很容易地实现这一点。
我们可以通过输入以下命令来添加一个列,以显示每个设备的最后一次维护访问:
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”记录(这将匹配表中的每个秋千),并将其颜色更改为“红色”。如果我们给它喷了一层油漆,这可能会很有用:
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)
如你所见,我们的秋千现在被注册为红色。
结论
你现在已经在你的 Ubuntu 14.04 服务器上设置了 PostgreSQL。然而,还有更多关于 Postgres 的知识需要学习。以下是一些涵盖如何使用 Postgres 的更多指南:
- 关系数据库管理系统的比较
- 学习如何创建和管理 Postgres 表
- 更好地管理角色和权限
- 使用 Select 在 Postgres 中编写查询
- 安装 phpPgAdmin 以通过 Web 界面管理数据库
- 学习如何保护 PostgreSQL
- 设置主从复制与 Postgres
- 学习如何备份 Postgres 数据库