如何在 Ubuntu 16.04 上安装和使用 PostgreSQL

介绍

关系数据库管理系统是许多网站和应用程序的关键组成部分,它们提供一个结构化的存储,组织和访问信息的方式。

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 的指南:

Published At
Categories with 技术
comments powered by Disqus