介绍
关系数据库管理系统是许多网站和应用程序的关键组件。 它们提供了一种结构化的方式来存储、组织和访问信息。
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
Linux 帐户与 Postgres 管理角色相关联,可以访问一些实用程序来创建用户和数据库。
我们可以通过键入以下内容来创建新角色:
createuser --interactive
这基本上是一个交互式 shell 脚本,它调用正确的 Postgres 命令来根据您的规范创建用户。 它只会问你两个问题:角色的名称以及它是否应该是超级用户。 您可以通过传递一些额外的标志来获得更多控制权。 通过查看 man
页面查看选项:
man createuser
创建新数据库
默认情况下设置 Postgres 的方式(验证匹配系统帐户请求的角色)还假设存在一个匹配的数据库供角色连接。
因此,如果我有一个名为 test1
的用户,默认情况下,该角色将尝试连接到名为 test1
的数据库。
您可以通过简单地以 postgres
用户身份调用此命令来创建适当的数据库:
createdb测试1
使用新用户连接到 Postgres
假设您有一个名为 test1
的 Linux 系统帐户(您可以通过键入:adduser test1
创建一个),并且您创建了一个 Postgres 角色和数据库,也称为 test1
.
您可以通过键入以下内容更改为 Linux 系统帐户:
sudo -i -u test1
然后,您可以通过键入以下内容以 test1
Postgres 角色连接到 test1
数据库:
psql
假设所有组件都已配置,这将自动登录。
如果您希望您的用户连接到不同的数据库,您可以通过像这样指定数据库来实现:
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 ) );
如您所见,我们给表命名,然后定义我们想要的列,以及列类型和字段数据的最大长度。 我们还可以选择为每列添加表约束。
您可以在此处了解有关 如何在 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
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'); 插入操场(类型、颜色、位置、安装日期)值('swing'、'yellow'、'northwest'、'2010-08-16');
你应该注意到一些事情。 首先,请记住,不应引用列名,但您输入的列 values 确实需要引号。
要记住的另一件事是,我们没有为 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 游乐场添加 last_maint 日期;
如果再次查看表信息,您将看到已添加新列(但未输入任何数据):
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”记录(这将匹配我们表中的 every swing)并将其颜色更改为“red”。 如果我们给它一个油漆工作,这可能很有用:
更新操场设置颜色 = '红色' WHERE 类型 = '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: