介绍
关系数据库管理系统是许多网站和应用程序的关键组成部分,它们提供一个结构化的存储,组织和访问信息的方式。
PostgreSQL 或 Postgres 是一个关系式数据库管理系统,提供 SQL 查询语言的实现,它是许多小型和大型项目的受欢迎选择,具有符合标准的优势,具有许多先进的功能,如可靠的交易和无读锁的同步。
在本指南中,我们将展示如何在Ubuntu 16.04 VPS实例上安装Postgres,并通过一些基本的方法来使用它。
安装
Ubuntu 的默认存储库包含 Postgres 包,因此我们可以使用apt
包装系统轻松安装这些包。
由于这是我们第一次在这个会话中使用apt
,我们需要更新我们的本地包索引,然后我们可以安装Postgres包和一个贡献
包,添加一些额外的实用性和功能:
1sudo apt-get update
2sudo apt-get install postgresql postgresql-contrib
现在我们的软件已安装,我们可以看看它是如何工作的,以及它可能与您可能使用的类似数据库管理系统有何不同。
使用 PostgreSQL 角色和数据库
默认情况下,Postgres使用一个名为角色
的概念来处理身份验证和授权,这些在某种程度上类似于常规的Unix类型帐户,但Postgres不区分用户和群组,而更喜欢更灵活的术语角色
。
在安装时,Postgres 设置为使用 ident 身份验证,这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户相关联。
有几种方法可以使用此帐户访问 Postgres。
转到 postgres 帐户
安装过程创建了一个名为postgres
的用户帐户,与默认的 Postgres 角色相关联。
切换到您的服务器上的postgres
帐户,键入:
1sudo -i -u postgres
您现在可以通过键入立即访问 Postgres 提示:
1psql
您将登录并能够立即与数据库管理系统进行交互。
退出 PostgreSQL 提示通过键入:
1\q
你现在应该回到postgres
的Linux命令提示。
访问 Postgres 提示,而无需切换帐户
您还可以使用postgres
帐户直接使用sudo
运行您想要的命令。
例如,在最后一个例子中,我们只是想到一个Postgres提示,我们可以通过运行单个命令psql
作为postgres
用户以sudo
的方式在一个步骤中做到这一点:
1sudo -u postgres psql
这会让你直接登录到Postgres,而没有中间的bash
壳。
再次,您可以通过键入退出互动 Postgres 会话:
1\q
创建新角色
目前,我们只在数据库中配置了postgres
角色,我们可以使用createrole
命令从命令行创建新的角色,而interactive
旗帜将提示您找到必要的值。
如果您已登录为postgres
帐户,您可以通过键入创建新用户:
1createuser --interactive
如果您宁愿在不从正常帐户切换的情况下为每个命令使用sudo
,则可以键入:
1sudo -u postgres createuser --interactive
该脚本将提示您一些选择,并根据您的回复,执行正确的 Postgres 命令,以创建用户以满足您的规格。
1[secondary_label Output]
2Enter name of role to add: sammy
3Shall the new role be a superuser? (y/n) y
您可以通过通过一些额外的旗帜获得更多的控制权. 通过查看男人
页面查看选项:
1man createuser
创建新数据库
默认情况下,Postgres 身份验证系统的另一个假设是,将有一个与用于登录的角色相同的名称的数据库,该角色可以访问。
因此,如果在最后一节中,我们创建了一个名为sammy
的用户,这个角色将试图连接到一个数据库,该数据库也被称为sammy
。
如果你登录为postgres
帐户,你会输入类似的东西:
1createdb sammy
相反,如果您更喜欢在不从正常帐户切换的情况下为每个命令使用sudo
,则您会键入:
1sudo -u postgres createdb sammy
打开一个 Postgres 窗口与新角色
要使用基于ident
的身份验证登录,您需要一个与您的 Postgres 角色和数据库相同的 Linux 用户。
如果你没有一个匹配的Linux用户可用,你可以用adduser
命令创建一个,你将不得不从拥有sudo
特权的帐户(未登录为postgres
用户)这样做:
1sudo adduser sammy
一旦您有相应的帐户可用,您可以通过键入切换并连接到数据库:
1sudo -i -u sammy
2psql
或者,你可以做这个内线:
1sudo -u sammy psql
您将自动登录,假设所有组件已正确配置。
如果您希望您的用户连接到不同的数据库,则可以通过这样指定数据库:
1psql -d postgres
一旦登录,您可以通过键入检查当前连接信息:
1\conninfo
1[secondary_label Output]
2You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
如果您正在连接到非默认数据库或非默认用户,这可能是有用的。
创建和删除表
现在你知道如何连接到PostgreSQL数据库系统,我们可以谈谈如何完成一些基本任务。
首先,我们可以创建一个表格来存储一些数据,让我们创建一个表格,描述游乐场设备。
这个命令的基本语法是这样的:
1CREATE TABLE table_name (
2 column_name1 col_type (field_length) column_constraints,
3 column_name2 col_type (field_length),
4 column_name3 col_type (field_length)
5);
正如您所看到的,我们给表一个名称,然后定义我们想要的列,以及列类型和字段数据的最大长度。
您可以了解更多关于 如何在 Postgres 中创建和管理表的信息。
为了我们的目的,我们将创建一个简单的表,如下:
1CREATE TABLE playground (
2 equip_id serial PRIMARY KEY,
3 type varchar (50) NOT NULL,
4 color varchar (25) NOT NULL,
5 location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
6 install_date date
7);
我们创建了一个游乐场表,库存我们所拥有的设备。这始于设备ID,即序列
类型。这个数据类型是自动加倍的整数。我们给了这个列主要密钥
的限制,这意味着值必须是唯一的,而不是零。
对于我们的两个列(‘equip_id’和‘install_date’),我们没有给出一个字段长度,因为某些列类型不需要设置长度,因为长度是由类型暗示的。
然后我们给设备的列类型
和颜色
,每个列不能空。我们创建一个位置
列,并创建一个限制,要求该值是八种可能的值之一。
我们可以通过键入查看我们的新表:
1\d
1[secondary_label Output]
2 List of relations
3 Schema | Name | Type | Owner
4--------+-------------------------+----------+-------
5 public | playground | table | sammy
6 public | playground_equip_id_seq | sequence | sammy
7(2 rows)
我们的游乐场桌在这里,但我们也有一个名为playground_equip_id_seq
的东西,它是序列
的类型。这是我们给我们的equip_id
列的序列
类型的表示。
如果您只想看到没有序列的表,您可以键入:
1\dt
1[secondary_label Output]
2 List of relations
3 Schema | Name | Type | Owner
4--------+------------+-------+-------
5 public | playground | table | sammy
6(1 row)
添加、查询和删除表中的数据
现在我们有一个表,我们可以插入一些数据。
我们通过呼叫我们想要添加的表,命名列,然后为每个列提供数据。
1INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
2INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');
首先,请记住,列名不应该引用,但您输入的列 values 需要引用。
另外要记住的是,我们不输入equip_id
列的值,这是因为每当在表中创建一个新行时,它会自动生成。
然后我们可以通过键入返回我们添加的信息:
1SELECT * FROM playground;
1[secondary_label Output]
2 equip_id | type | color | location | install_date
3----------+-------+--------+-----------+--------------
4 1 | slide | blue | south | 2014-04-28
5 2 | swing | yellow | northwest | 2010-08-16
6(2 rows)
在这里,您可以看到我们的equip_id
已成功填写,我们的所有其他数据均已正确组织。
如果游戏场上的滑板破裂,我们必须删除它,我们也可以通过键入从我们的桌子上删除行:
1DELETE FROM playground WHERE type = 'slide';
如果我们再次查询我们的表,我们会看到我们的幻灯片不再是表的一部分:
1SELECT * FROM playground;
1[secondary_label Output]
2 equip_id | type | color | location | install_date
3----------+-------+--------+-----------+--------------
4 2 | swing | yellow | northwest | 2010-08-16
5(1 row)
如何从表中添加和删除列
如果我们想要在创建表后更改表以添加额外的列,我们可以轻松地做到这一点。
我们可以添加一个列来显示每个设备的最后维修访问,输入:
1ALTER TABLE playground ADD last_maint date;
如果您再次查看表信息,则会看到新列已添加(但未输入任何数据):
1SELECT * FROM playground;
1[secondary_label Output]
2 equip_id | type | color | location | install_date | last_maint
3----------+-------+--------+-----------+--------------+------------
4 2 | swing | yellow | northwest | 2010-08-16 |
5(1 row)
如果我们发现我们的工作人员使用一个单独的工具来跟踪维护历史,我们可以通过键入以下方式来删除该列:
1ALTER TABLE playground DROP last_maint;
如何更新表中的数据
我们知道如何将记录添加到表中,以及如何删除它们,但我们尚未说明如何修改现有条目。
您可以通过查询您想要的记录来更新现有记录的值,并将列设置为您想要使用的值。我们可以查询旋转
记录(这将匹配我们表中的每一个旋转),并将其颜色更改为红色
。
1UPDATE playground SET color = 'red' WHERE type = 'swing';
我们可以通过重新查询我们的数据来验证操作是否成功:
1SELECT * FROM playground;
1[secondary_label Output]
2 equip_id | type | color | location | install_date
3----------+-------+-------+-----------+--------------
4 2 | swing | red | northwest | 2010-08-16
5(1 row)
正如你所看到的,我们的幻灯片现在注册为红色。
结论
现在你已经在 Ubuntu 16.04 服务器上安装了 PostgreSQL 了,但是,在 Postgres 中还有很多东西要学习,这里有更多关于如何使用 Postgres 的指南: