如何在 Debian 8 上安装和使用 PostgreSQL 9.4
介绍
关系数据库是满足多种需求的数据组织的基石。它们为从在线购物到火箭发射的一切提供动力。 PostgreSQL 是一个既受人尊敬又仍在游戏中的数据库。 PostgreSQL 遵循大部分 SQL 标准,具有 ACID 事务,支持外键和视图,并且仍在积极开发中。
如果您正在运行的应用程序需要稳定性、软件包质量和易于管理,Debian 8(代号“Jessie”)是 Linux 发行版的最佳候选者之一。它比其他“发行版”运行得慢一些, ” 但其稳定性和质量是公认的。如果您的应用程序或服务需要数据库,Debian 8 和 PostgreSQL 的组合是市面上最好的组合之一。
在本文中,我们将向您展示如何在新的 Debian 8 Stable 实例上安装 PostgreSQL 并开始使用。
先决条件
首先是让 Debian 8 Stable 系统运行。您可以按照 Debian 8 初始服务器设置一文中的说明进行操作。本教程假设您已准备好 Debian 8 Stable Droplet。
除非另有说明,否则本教程中的所有命令都应以具有 sudo 权限的非根用户身份运行。要了解如何创建用户并授予他们 sudo 权限,请查看 Debian 8 的初始服务器设置。
安装 PostgreSQL
在安装 PostgreSQL 之前,通过使用以下内容更新 apt 包列表,确保您拥有来自 Debian 存储库的最新信息:
- sudo apt-get update
您应该看到正在更新的包列表和以下消息:
Reading package lists... Done.
有几个以 postgresql
开头的包:
postgresql-9.4
:PostgreSQL 服务器包postgresql-client-9.4
:PostgreSQL 的客户端postgresql
:Debian 新维护者指南更好地解释了一个“元包”
直接安装 postgresql-9.4
包:
- sudo apt-get install postgresql-9.4 postgresql-client-9.4
当询问时,键入 Y
以安装包。如果一切顺利,现在就可以从存储库下载并安装软件包。
检查安装
要检查 PostgreSQL 服务器是否已正确安装并正在运行,您可以使用命令 ps
:
# ps -ef | grep postgre
你应该在终端上看到类似这样的东西:
postgres 32164 1 0 21:58 ? 00:00:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/ postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf
postgres 32166 32164 0 21:58 ? 00:00:00 postgres: checkpointer process
postgres 32167 32164 0 21:58 ? 00:00:00 postgres: writer process
postgres 32168 32164 0 21:58 ? 00:00:00 postgres: wal writer process
postgres 32169 32164 0 21:58 ? 00:00:00 postgres: autovacuum launcher process
postgres 32170 32164 0 21:58 ? 00:00:00 postgres: stats collector process
成功! PostgreSQL 已成功安装并正在运行。
访问 PostgreSQL 数据库
在 Debian 上,PostgreSQL 安装有一个默认用户和默认数据库,都称为 postgres
。要连接到数据库,首先您需要在以 root 身份登录时发出以下命令以切换到 postgres
用户(这不适用于 sudo 访问):
- su - postgres
您现在应该登录为 postgres
。要启动 PostgreSQL 控制台,请键入 psql
:
- psql
完毕!您应该登录到 PostgreSQL 控制台。您应该会看到以下提示:
psql (9.4.2)
Type "help" for help.
postgres=#
要退出 psql 控制台,只需使用命令 \q
。
创建新角色
默认情况下,Postgres 使用称为“角色”的概念来帮助进行身份验证和授权。在某些方面,这些类似于常规的 Unix 样式帐户,但 PostgreSQL 不区分用户和组,而是更喜欢更灵活的术语\“角色”。
安装后,PostgreSQL 设置为使用“ident”身份验证,这意味着它将 PostgreSQL 角色与匹配的 Unix/Linux 系统帐户相关联。如果存在 PostgreSQL 角色,则可以通过登录关联的 Linux 系统帐户来登录。
安装过程创建了一个名为 postgres 的用户帐户,该帐户与默认的 Postgres 角色相关联。
要创建其他角色,我们可以使用 createuser
命令。请注意,此命令应作为用户 postgres
发出,而不是在 PostgreSQL 控制台内发出:
- createuser --interactive
这基本上是一个交互式 shell 脚本,它调用正确的 PostgreSQL 命令来创建符合您规范的用户。它会问你一些问题:角色的名称,它是否应该是超级用户,角色是否应该能够创建新的数据库,以及角色是否能够创建新角色。 man
页面有更多信息:
- man createuser
创建新数据库
PostgreSQL 默认设置有匹配系统帐户请求的身份验证角色。 (您可以在 postgresql.org 获得更多相关信息)。它还假设存在匹配的数据库供角色连接。因此,如果我有一个名为 test1
的用户,该角色将默认尝试连接到一个名为 test1
的数据库。
您可以通过简单地以 postgres
用户身份调用此命令来创建适当的数据库:
- createdb test1
新数据库 test1
现已创建。
使用新用户连接到 PostgreSQL
假设您有一个名为 test1
的 Linux 帐户,创建了一个 PostgreSQL test1
角色来匹配它,并创建了数据库 test1
。将 Linux 中的用户帐户更改为 test1
:
- su - test1
然后,使用以下命令以 test1
PostgreSQL 角色连接到 test1
数据库:
- psql
现在,您应该会看到 PostgreSQL 提示符显示新创建的用户 test1
而不是 postgres
。
创建和删除表
现在您知道如何连接到 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)
);
正如你所看到的,我们给表起了一个名字,然后定义了我们想要的列,以及列类型和字段数据的最大长度。我们还可以选择为每一列添加表约束。
您可以在如何在云服务器上的 PostgreSQL 中创建、删除和管理表一文中了解有关如何在 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 开头。此数据类型是一个自动递增的整数。我们已经为该列提供了主键约束,这意味着值必须是唯一的且不能为空。
对于我们的两个专栏,我们没有给出字段长度。这是因为某些列类型不需要设置长度,因为长度由类型隐含。
然后我们给出设备类型和颜色的列,每个列都不能为空。然后我们创建一个位置列并创建一个约束,要求该值是八个可能值之一。最后一栏是日期栏,记录了我们安装设备的日期。
要查看这些表,请在 psql 提示符下使用命令 \dt
。结果将类似于
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | playground | table | postgres
如您所见,我们有游乐场桌。
在表中添加、查询和删除数据
现在我们已经创建了一个表,我们可以向其中插入一些数据。
让我们添加一个幻灯片和一个秋千。为此,我们调用要添加的表,为列命名,然后为每一列提供数据。我们的幻灯片和秋千可以这样添加:
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
在这里,您可以看到我们的 equip_id
已成功填写,并且我们所有其他数据已正确组织。如果我们的幻灯片中断了,并且我们将它从 playground 中移除,我们也可以通过键入以下内容从我们的表格中移除该行:
DELETE FROM playground WHERE type = 'slide';
如果我们再次查询我们的表:
SELECT * FROM playground;
我们将看到我们的幻灯片不再是表格的一部分:
equip_id | type | color | location | install_date
----------+-------+-------+----------+--------------
1 | slide | blue | south | 2014-04-28
有用的命令
以下是一些可以帮助您了解当前环境的命令:
- <李> ?:获取 psql 命令的完整列表,包括此处未列出的命令。 <李> \h:获取有关 SQL 命令的帮助。您可以使用特定的命令来获取语法方面的帮助。 <李> \q:退出 psql 程序并退出到 Linux 提示符。 <李> \d:列出当前数据库中可用的表、视图和序列。 <李> \du: 列出可用的角色 <李> \dp: 列出访问权限 <李> \dt:列出表 <李> \l: 列出数据库 <李>
- SQL 命令
- SQLite 对比 MySQL 对比 PostgreSQL
- 如何在 VPS 上的 PostgreSQL 中使用角色和管理授予权限
使用这些命令,您应该能够立即浏览 PostgreSQL 数据库、表和角色。
结论
您现在应该已经在您的 Debian 系统上启动并运行了一个功能齐全的 PostgreSQL 数据库。恭喜!从这里可以获取大量文档:
- <李> PostgreSQL 手册 <李> 安装软件包
postgresql-doc
:sudo apt-get install postgresql-doc
<李> README
文件安装在 /usr/share/doc/postgresql-doc-9.4/tutorial/README
如需 PostgreSQL 中支持的 SQL 命令的完整列表,请点击此链接:
要比较数据库的不同功能,您可以查看:
要更好地了解角色和权限,请参阅: