在Ubuntu 18.04上安装和使用PostgreSQL的方法

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 在Ubuntu 18.04上安装和使用PostgreSQL的方法

简介

关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种结构化的方式来存储、组织和访问信息。

PostgreSQL,或者简称为 Postgres,是一个关系数据库管理系统,提供了 SQL 查询语言的实现。它是许多小型和大型项目的热门选择,并且具有符合标准的优势,以及可靠的事务和并发性而无需读取锁定等许多高级功能。

本指南演示了如何在 Ubuntu 18.04 VPS 实例上安装 Postgres,并提供了基本数据库管理的说明。

先决条件

要按照本教程进行操作,您需要一个已经按照我们的《Ubuntu 18.04 初始服务器设置指南》进行配置的 Ubuntu 18.04 服务器。完成先决条件教程后,您的服务器应该具有一个具有 sudo 权限的非 root 用户和一个基本防火墙。

步骤 1 — 安装 PostgreSQL

Ubuntu 的默认软件仓库中包含了 Postgres 软件包,因此您可以使用 apt 软件包管理系统来安装这些软件包。

由于这是您在本次会话中第一次使用 apt,请先刷新本地软件包索引。然后,安装 Postgres 软件包以及一个 -contrib 软件包,该软件包添加了一些额外的实用工具和功能:

sudo apt update
sudo apt install postgresql postgresql-contrib

使用 systemctl start 命令确保服务器正在运行:

sudo systemctl start postgresql.service

现在软件已安装并运行,我们可以了解它的工作原理以及它与您可能使用过的类似数据库管理系统有何不同。

步骤 2 — 使用 PostgreSQL 角色和数据库

默认情况下,Postgres 使用一种称为 角色 的概念来处理身份验证和授权。在某些方面,这与常规的 Unix 风格帐户类似,但 Postgres 不区分用户和组,而是更倾向于更灵活的术语 “角色”。

在安装时,Postgres 被设置为使用 ident 身份验证,这意味着它将 Postgres 角色与匹配的 Unix/Linux 系统帐户关联起来。如果一个角色存在于 Postgres 中,具有相同名称的 Unix/Linux 用户名就能够以该角色登录。

安装过程创建了一个名为 postgres 的用户帐户,该帐户与默认的 Postgres 角色关联。要使用 Postgres,您可以登录到该帐户。

有几种方法可以使用该帐户访问 Postgres。

切换到 postgres 帐户

通过输入以下命令,在服务器上切换到 postgres 帐户:

sudo -i -u postgres

现在,您可以立即通过输入以下命令访问 Postgres 提示符:

psql

这将使您登录到 PostgreSQL 提示符,从这里您可以立即与数据库管理系统交互。

通过输入以下命令退出 PostgreSQL 提示符:

\q

这将带您回到 postgres Linux 命令提示符。

在不切换帐户的情况下访问 Postgres 提示符

在上一个示例中,您被指示首先切换到 postgres 用户,然后运行 psql 打开 Postgres 提示符。您也可以通过以下单个命令在 postgres 用户下使用 sudo 来完成这一步:

sudo -u postgres psql

这将直接将您登录到 Postgres,而不需要中间的 bash shell。

同样,您可以通过输入以下命令退出交互式 Postgres 会话:

\q

许多用例需要多个 Postgres 角色。接下来了解如何配置这些角色。

步骤 3 — 创建新角色

目前,您只配置了数据库中的 postgres 角色。您可以使用 createrole 命令从命令行创建新角色。--interactive 标志将提示您输入新角色的名称,并询问是否应该具有超级用户权限。

如果您已登录为 postgres 帐户,可以通过输入以下命令创建新用户:

createuser --interactive

如果您更喜欢在不切换到正常帐户的情况下为每个命令使用 sudo,则输入以下命令:

sudo -u postgres createuser --interactive

该脚本将提示您进行一些选择,并根据您的响应执行正确的 Postgres 命令以创建符合您规格的用户。

首先,提示将要求您指定新角色的名称。以下示例将角色命名为 sammy,但您可以根据需要命名:

Enter name of role to add: sammy

接下来,将询问新角色是否应该是超级用户。在 PostgreSQL 中,超级用户角色拥有极其广泛的特权,并且可以绕过几乎所有权限检查。

以下示例指定 sammy 角色应该是超级用户,但是由于超级用户角色在数据库上具有极大的权限和控制,您不应该轻易授予新角色超级用户状态:

Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y

请注意,只有在以已经是超级用户的角色创建它们时,才能创建新的超级用户角色。默认情况下,postgres 角色是超级用户。

您可以通过传递一些额外的标志来获得更多控制。通过查看 man 页面来查看选项:

man createuser

您的 Postgres 安装现在有了一个新角色,但您尚未添加任何数据库。下一节将描述此过程。

步骤 4 —— 创建新数据库

Postgres 认证系统默认假设任何用于登录的角色都将拥有同名的数据库,并且可以访问该数据库。

这意味着,如果你在上一节创建的用户叫做 sammy,那么该角色将默认尝试连接到一个也叫“sammy”的数据库。你可以使用 createdb 命令创建相应的数据库。

如果你以 postgres 账户登录,你可以输入如下命令:

createdb sammy

如果你更喜欢在不切换到 postgres 用户的情况下为每个命令使用 sudo,你可以输入:

sudo -u postgres createdb sammy

这种灵活性提供了多种创建数据库的途径。

步骤 5 —— 使用新角色打开 Postgres 提示符

要使用基于 ident 的认证登录,你需要一个与你的 Postgres 角色和数据库同名的 Linux 用户。

如果你没有匹配的 Linux 用户可用,你可以使用 adduser 命令创建一个。你需要在拥有 sudo 权限的非 root 账户下执行此操作(也就是说,不要以 postgres 用户登录):

sudo adduser sammy

一旦新账户可用,你可以切换并连接到数据库,输入:

sudo -i -u sammy
psql

或者,你可以内联执行:

sudo -u sammy psql

这个命令将自动登录你,假设所有组件都已正确配置。

如果你想让你的用户连接到不同的数据库,你可以这样指定数据库:

psql -d postgres

登录后,你可以通过输入以下命令检查当前连接信息:

\conninfo
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

如果你连接到非默认数据库或使用非默认用户,这将非常有用。

步骤 6 —— 创建和删除表

现在你知道如何连接到 PostgreSQL 数据库系统,可以学习一些基本的 Postgres 管理任务。

首先,创建一个表来存储一些数据。举个例子,创建一个描述一些游乐场设备的表。

这个命令的基本语法如下:

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 约束,这意味着值必须是唯一的且不为空。

对于两个列(equip_idinstall_date),命令没有指定字段长度。这是因为某些列类型不需要设置长度,因为长度由类型隐含确定。

接下来的两个命令分别为设备 typecolor 创建了列,每个列都不能为空(由应用到每个列的 NOT NULL 约束指定)。在这些命令之后的行创建了一个 location 列,并添加了一个约束,要求该列的值必须是八个可能值中的一个。括号内的最后一行创建了一个 date 列,记录你安装设备的日期。

请注意,在 SQL 中,每个语句必须以分号(;)结尾。

如果你正确输入了 CREATE TABLE 操作,它将返回以下输出:

CREATE TABLE

你可以通过输入以下命令找到此数据库中的表列表:

\d
List of relations
 Schema |          Name           |   Type   | Owner
--------+-------------------------+----------+-------
 public | playground              | table    | sammy
 public | playground_equip_id_seq | sequence | sammy
(2 rows)

你的 playground 表在这里,但还有一个叫做 playground_equip_id_seq 的类型为 sequence 的东西。这是你给 equip_id 列的 serial 类型的表示。它跟踪序列中的下一个数字,并且会自动为此类型的列创建。

如果你只想返回表而不返回序列,你可以输入:

\dt
List of relations
 Schema |    Name    | Type  | Owner
--------+------------+-------+-------
 public | playground | table | sammy
(1 row)

第 7 步 —— 向表中添加、查询和删除数据

现在你已经有了一个表,你可以向其中插入一些数据。

举个例子,通过调用你想要添加数据的表,命名列,然后为每列提供数据,来添加一个滑梯和一个秋千,就像这样:

INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

在输入数据时要小心,避免一些常见的问题。首先,不要用引号括住列名,但是你输入的列值需要加上引号。

另一件需要记住的事情是,不要为 equip_id 列输入值。这是因为每当在表中创建新行时,它会自动生成。

通过输入以下命令来检索你添加的信息:

SELECT * FROM playground;
equip_id | type  | color  | location  | install_date
----------+-------+--------+-----------+--------------
        1 | slide | blue   | south     | 2017-04-28
        2 | swing | yellow | northwest | 2018-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 | 2018-08-16
(1 row)

注意到你的滑梯不再是表中的一部分了。

第 8 步 —— 向表中添加和删除列

在创建表之后,你可以相对容易地修改它来添加或删除列。通过输入以下命令来添加一个列,用于显示每个设备的最后维护日期:

ALTER TABLE playground ADD last_maint date;

下次再次查看表信息时,新列将已经被添加(但是没有数据被输入):

SELECT * FROM playground;
equip_id | type  | color  | location  | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
        2 | swing | yellow | northwest | 2018-08-16   |
(1 row)

要删除一个列,你可以输入一个与你用来添加 last_maint 列非常相似的 SQL 语句。如果你发现你的工作人员使用单独的工具来跟踪维护历史,你可以通过输入以下命令来删除该列:

ALTER TABLE playground DROP last_maint;

这将删除 last_maint 列以及其中找到的任何值,但会保留所有其他数据。

第 9 步 —— 更新表中的数据

到目前为止,你已经学会了如何向表中添加记录以及如何删除它们,但是本教程还没有涵盖如何修改现有条目。

你可以通过查询你想要的记录并将列设置为你希望使用的值来更新现有条目的值。你可以查询 “swing” 记录(这将匹配表中的 每个 秋千)并将其颜色更改为 “red”。如果你给秋千涂了一层油漆,这可能会很有用:

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 18.04 服务器上设置了 PostgreSQL。然而,还有 更多 关于 Postgres 的知识等待你去学习。以下是一些覆盖如何使用 Postgres 的更多指南:

  • 关系数据库管理系统的比较
  • 学习如何创建和管理 Postgres 表
  • 更好地管理角色和权限
  • 使用 Select 在 Postgres 中编写查询
  • 学习如何保护 PostgreSQL
  • 学习如何备份 Postgres 数据库


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
Ubuntu 网络协议 应用服务中间件
在 Ubuntu 上安装 Nginx
在 Ubuntu 上安装和配置 Nginx 非常简单。首先更新系统包,然后通过 `apt` 安装 Nginx,检查服务状态并配置防火墙规则。访问服务器 IP 测试是否成功显示默认页面。还可管理服务、创建虚拟主机及排查常见问题,适合新手快速上手部署高性能 Web 服务。
301 0
|
3天前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
在整个安装过程中,你可能需要管理员权限,因此你可能要使用 `sudo` 来获取必要的权限。记得做完每一个步骤后,都要检查输出,以确保没有发生错误,并且每项操作都成功完成。如果在安装过程中遇到问题,查看 `/var/log/` 下的日志文件对于问题的解决可能是有帮助的。
43 21
|
8天前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
40 11
|
7天前
|
Kubernetes 负载均衡 Ubuntu
Kubernetes安装详细教程 Ubuntu版
本教程基于Ubuntu 22.04配置Kubernetes环境,涵盖依赖安装、swap关闭、内核参数调整、containerd与Kubernetes组件安装、集群初始化及CNI网络插件部署等内容,并提供常见问题处理方法和相关工具推荐。
|
7天前
|
Ubuntu Docker 容器
Ubuntu国内镜像Docker安装详细教程
Ubuntu国内镜像Docker安装详细教程
|
27天前
|
Ubuntu 机器人 定位技术
Loam在Ubuntu 18.04上的一站式安装指南
现在,你已经完成了Loam在Ubuntu 18.04上的一站式安装盛宴。从更新系统清洁,到搭建魔法环境的工作空间,再到召唤和激活Loam精髓的艺术——每步都妙不可言,每步都至关重要,让你在这场技术的饕餮盛宴中大显身手。
52 8
|
1月前
|
Ubuntu Linux Shell
Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
以上就是在Linux环境下安装VSCode的终极指南,抛开繁复的专业词汇,以平易近人的文字、形象生动的比喻让你轻松学会这一过程。别忘了,你的小伙伴VSCode已经在应用菜单里等你了!
359 23
|
2天前
|
Ubuntu Linux 数据安全/隐私保护
在Ubuntu上安装OpenVPN客户端
在 Linux 上安装并配置 OpenVPN 客户端,连接公司或服务器局域网。使用 `apt-get` 安装 OpenVPN,通过指定 `.ovpn` 配置文件启动客户端。若需,输入私钥密码。可执行 `ping` 命令测试网络连通性。
45 0
|
1月前
|
Ubuntu Linux 数据安全/隐私保护
Windows中安装WSL 2和Ubuntu系统的教程
回看这一路,有趣吧?你已经跨界成为了一个Windows和Linux的桥梁。期待在代码的世界里,把一切玩得风生水起!
69 13