在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 relationsSchema |          Name           |   Type   | Owner
--------+-------------------------+----------+-------public | playground              | table    | sammypublic | playground_equip_id_seq | sequence | sammy
(2 rows)

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

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

\dt
          List of relationsSchema |    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-282 | 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 数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)

基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 开发合适的儿童预防接种预约微信小程序,可以方便管理人员对儿童预防接种预约微信小程序的管理,提高信息管理工作效率及查询…

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合

目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输…

移动UI:排行榜单页面如何设计,从这五点入手,附示例。

移动UI的排行榜单页面设计需要考虑以下几个方面: 1. 页面布局: 排行榜单页面的布局应该清晰明了,可以采用列表的形式展示排行榜内容,同时考虑到移动设备的屏幕大小,应该设计合理的滚动和分页机制,确保用户…

贪心算法.

哈夫曼树 哈夫曼树(Huffman Tree),又称为霍夫曼树或最优二叉树,是一种带权路径长度最短的二叉树,常用于数据压缩。 定义:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树…

普乐蛙VR航天航空体验馆知识走廊VR体验带你登陆月球

VR航天航空设备是近年来随着虚拟现实(VR)技术的快速发展而兴起的一种新型设备,它结合了航天航空领域的专业知识与VR技术的沉浸式体验,为用户提供了前所未有的航天航空体验。以下是对VR航天航空设备的详细介绍: 一、设备…

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text,白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

Golang | Leetcode Golang题解之第295题数据流的中位数

题目: 题解: type MedianFinder struct {nums *redblacktree.Treetotal intleft, right iterator }func Constructor() MedianFinder {return MedianFinder{nums: redblacktree.NewWithIntComparator()} }func (mf *MedianFinder) AddNum(…

MySQL中多表查询之外连接

首先先来介绍一下我做的两个表,然后再用他们两个举例说明。 -- 创建教师表 create table teachers( id_t int primary key auto_increment, -- 老师编号 name_t varchar(5) -- 姓名 ); -- 创建学生表 create table students( id_s int primary key auto_increment,…

数据结构——单链表OJ题(下)

目录 一、链表的回文结构 思路一:数组法 (1)注意 (2)解题 思路二:反转链表法 (1) 注意 (2)解题 二、相交链表 (1)思路&#…

优化算法:1.遗传算法(GA)及Python实现

一、定义 遗传算法就像是在模拟“优胜劣汰”的进化过程,通过选择最优秀的个体,交配产生下一代,并引入一定的变异,逐步优化解决问题。 二、具体步骤 初始化种群(Initialization): 假设你要找到一个迷宫的最佳出口路径。…

CTF-NSSCTF[GKCTF 2021]

[GKCTF 2021]easycms 考察: 用扫描工具扫描目录,扫描到后台登录界面/admin.php 题目提示了密码是五位弱口令,试了试弱口令admin和12345直接成功了 任意文件下载 点击设计-->主题然后随便选择一个主题,点击自定义&#xff0…

故障诊断 | 基于Transformer故障诊断分类预测(Matlab)

文章目录 预测效果文章概述程序设计参考资料预测效果 文章概述 Transformer故障诊断/分类预测 | 基于Transformer故障诊断分类预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是…

CTF之网站被黑

简单看一下网页和源码没发现什么明显漏洞 那就扫描一下目录 发现了/shell.php文件,访问一下,发现是一个后台管理登录页面 别无他法只能爆破喽,爆破后发现密码是hack flag{25891d9e9d377f006eda3ca7d4c34c4d}

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为: private Date crdat; 2.数据库中的相应字段为: crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为: “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…

RedHat8安装Oracle19C

RedHat8安装Oracle19C 1、 更新yum源 更新yum源为阿里云镜像源: # 进入源目录 cd /etc/yum.repos.d/ # 删除 redhat 默认源 rm redhat.repo # 下载阿里云的centos7源 curl -O http://mirrors.aliyun.com/repo/Centos-8.repo # 替换 Centos-8.repo 中的 $releasev…

初学Mybatis之 Lombok 篇

idea 安装 Lombok 插件&#xff1a; File->Settings->Plugins->搜索 lombok 下载 在项目中导入 lombok 的 jar 包&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.…

C语言程序设计之数学函数篇

程序设计之数学函数 问题1_1代码1_1结果1_1 问题1_2代码1_2结果1 _2 问题1_3代码1_3结果1_3 问题1_1 函数 f u n fun fun 的功能是计算&#xff1a; s ln ⁡ ( 1 ) ln ⁡ ( 2 ) ln ⁡ ( 3 ) ⋯ ln ⁡ ( n ) s\sqrt{\ln(1)\ \ \ln(2)\ \ \ln(3)\ \ \cdots \ \ \ln(n)\ } …

ReentrantReadWriteLock详解

目录 ReentrantReadWriteLock详解1、ReentrantReadWriteLock简介2、ReentrantReadWriteLock类继承结构和类属性3、ReentrantReadWriteLock的读写锁原理分析4、ReentrantReadWriteLock.WriteLock类的核心方法详解非公平写锁的获取非公平写锁的释放公平写锁的获取公平写锁的释放 …

win11查找句柄泄露

1.打开任务管理器&#xff0c;不会的网上搜 2.选择详细信息 3.注意了 比较坑的一点 win11上详细信息不会默认显示句柄数。&#xff08;默认没有句柄那一列&#xff0c;妈的花了我好长时间找&#xff09; 右键&#xff0c;点击选择列 选择句柄 下面的列表里就能看到进程使用…

显著提升“视触觉传感器耐磨性”的贴金工艺,在植物和古生物化石检测上取得良好的识别效果

贴金&#xff0c;一种古老的技艺&#xff0c;是中华民族民间传统工艺的瑰宝&#xff01;金箔和贴金工艺的结合让朴实无华的工艺品重获新生。正如《天工开物》所述&#xff1a;“凡色至于金&#xff0c;为人间华美贵重&#xff0c;故人工成箔而后施之”。这项古老技艺如今可用于…