PostgreSQL 小课专栏大纲

PostgreSQL 介绍及发展历史

介绍

发展历史

克隆 PostgreSQL 的源代码

找到其第一次提交记录

看下第一次提交的信息

发布策略、版本号及生命周期

探索 PostgreSQL 中的术语

总结

PostgreSQL 安装

编译方式安装

yum 方式安装

apt 方式安装

Docker 方式运行

Mac/Windows 方式安装

Mac 方式安装

Windows 方式安装

pgAdmin 安装

启动/停止/重启

启动

停止

重启

总结

PG 多环境部署

了解我们的 PG 集群

pg_ctl

PostgreSQL 进程一览

模板数据库

探索 PGDATA 磁盘布局

PGDATA 目录中的对象

Tablespaces

PostgreSQL vs. MySQL

数据定义语言(DDL)

创建数据库

创建表

数据操纵语言(DML)

插入数据

查询数据

更新数据

删除数据

数据控制语言(DCL)

授权

撤销授权

结论

MySQL 与 PostgreSQL 中的数据类型对比

1. 数据类型

2. 索引

3. 约束

4. 事务处理

客户端连接的区别

基本操作命令的区别

建表语句的区别

MySQL 与 PostgreSQL 中的概念对比:Database 与 Schema

MySQL 中的 Database 与 Schema

PostgreSQL 中的 Database 与 Schema

总结

PostgreSQL 用户及授权管理

用户及组介绍

角色管理

创建角色

角色密码、连接和可用性

角色作为组

移除角色

检查已有角色

角色级别的连接管理

pg_hba.conf 语法

pg_hba.conf 中的规则顺序

多规则合并

授权规则中使用组

授权规则中使用文件

检查 pg_hba.conf 规则

pg_hba.conf 中引入其他文件

附录

命令行执行查询

查看用户的授权

总结

PostgreSQL 用户及授权管理 02:深入理解角色

深入理解角色

与新建对象相关的属性

与超级用户相关的属性

与复制相关的属性

与 RLS 相关的属性

修改角色属性:ALTER ROLE 语句

重命名角色
SESSION_USER vs. CURRENT_USER
为角色配置参数

查看角色信息

角色继承

权限是如何解析的
角色继承回顾

总结

PostgreSQL 用户及授权管理 03:ACLs

ACLs

默认 ACLs

了解默认 ACLs

总结

PostgreSQL 用户及授权管理 04:授予及回收权限

授予及回收权限

表相关的权限

基于列的权限

序列相关的权限

schema 相关的权限

schema 中的所有对象

编程语言相关的权限

例程相关的权限

database 相关的权限

授予对象所有者

获取 ACL 信息

总结

PostgreSQL 用户及授权管理 05:RLS

RLS

总结

PostgreSQL 用户及授权管理 06:启用 SSL 及验证

SSL 连接加密

生成相关的证书

通过 openssl 的方式创建证书
通过云厂商申请免费证书

为集群配置 SSL

通过 SSL 连接集群

附录

PostgreSQL 不支持 SSL 问题解决

抓包验证连接是否加密

没开启 SSL 的连接验证
已开启 SSL 的连接验证

总结

PostgreSQL 基础 SQL

创建及管理数据库

创建数据库

Schema 介绍
public 模式介绍
search_path 变量介绍
正确的打开方式
查看所有的表
从已修改的模板创建数据库
删除表及库
创建数据库副本
查看数据库的大小
创建 database 的时候发生了什么

表的管理

EXISTS 选项
临时表的管理
管理 unlogged 表
创建表
为表及字段添加注释

表操纵语句

插入及查询数据
NULL 值
NULL 值的排序
表的复制
更新数据
删除数据

总结

PostgreSQL 高级语句 01:高级 SELECT

探索 SELECT 语句

使用 like 子句

使用 ilike 子句

使用 distinct

使用 limit 及 offset

使用子查询

子查询和 IN/NOT IN 条件

子查询和 EXISTS/NOT EXISTS 条件

PostgreSQL 高级语句 02:连接查询

连接查询

内连接(INNER JOIN)

INNER JOIN vs. EXISTS/IN

左连接(LEFT JOIN)

右连接(RIGHT JOIN)

全外连接(FULL OUTTER JOIN)

横向连接(LATERAL JOIN)

PostgreSQL 高级语句 03:聚合函数

聚合函数

UNION/UNION ALL

EXCEPT/INTERSECT

PostgreSQL 高级语句 04:RETURNING 子句

UPSERT 语句

INSERT 的 RETURNING 子句

更新相关的多条记录

MERGE

UPDATE 的 RETURNING 子句

DELETE 的 RETURNING 子句

PostgreSQL 高级语句 05:CTEs

探索 CTEs

什么是 CTE

CTE - 使用场景

递归查询

递归 CTEs

总结

PostgreSQL 之 psql 命令定制

登录数据库

使用 psql

进阶功能

psql 定制

定制提示符

打开时间统计

执行系统命令

观察语句执行

常用的命令总结

查看当前的连接信息

查看数据库的运行时间

查看数据库目录

查看库里面有多少表

数据库及表占用磁盘空间大小

查看当前连接的信息

最大的 Top N 表是哪个

Window 函数

基础窗口函数

使用 PARTITION BY 函数及 WINDOW 子句

一些有用的函数

ROW_NUMBER 函数
ORDER BY 子句
FIRST_VAULE
LAST_VAULE
RANK
DENSE_RANK
LAG 及 LEAD 函数
CUME_DIST 函数
NTILE 函数

高级窗口函数

frame 子句

start_point 与 end_point 之间的行
RANGE BETWEEN 子句

总结

服务端编程

数据类型

什么是可扩展性

标准数据类型

布尔类型

数值类型

整型
固定精度的数值类型
任意精度的数值类型

字符类型

固定长度的字符类型
可变长度的字符类型(varchar)
可变长度的字符类型(text)

日期/时间戳类型

date 类型

区域设置和格式

timestamp 类型

NoSQL 数据类型

hstore 类型

JSON 类型

函数及编程语言

函数

SQL 函数

基础函数

返回一组数据的 SQL 函数

返回一个表的 SQL 函数

SQL 函数的多态

PL/pgSQL 函数

一个例子

删除函数

声明函数参数

输入/输出参数
函数波动性(易变性、稳定性)类别

控制结构

条件语句

IF 语句
CASE 语句

循环语句

record 类型

异常处理语句

安全定义

总结

触发器及规则

PostgreSQL 中的规则

理解 OLD 及 NEW 变量

INSERT 相关规则

ALSO 选项
INSTEAD 选项
INSTEAD NOTHING 选项

DELETE/UPDATE 相关规则

创建 new_tags 表
创建两个表

管理 INSERT/DELETE/UPDATE 事件上的规则

INSERT 规则
DELETE 规则
UPDATE 规则

PostgreSQL 中的触发器

触发器语法

INSERT 相关的触发器

TG_OP 变量

UPDATE/DELETE 相关的触发器

事件触发器

事件触发器示例

总结

分区

基本概念

范围分区

列表分区

哈希分区

表继承

drop 表

声明式分区

列表分区

范围分区

分区维护

附加新分区
分离现有分区
将现有表附加到父表

默认分区

分区及表空间

一个例子

总结

事务处理

事务介绍

隐式与显式事务对比

事务中的时间

事务 ID 相关问题

虚拟和真实事务 ID

多版本并发控制(MVCC)

事务隔离级别

读未提交

读已提交

可重复读

可串行化

MVCC 详解

Savepoints

Deadlocks

持久性及一致性的保证:WALs

WALs

如何保证宕机恢复

Checkpoints

Checkpoints 配置参数

checkpoint_timeout 与 max_wal_size
Checkpoints 限制
手工触发一个 checkpoint

VACUUM

手工 VACUUM

自动 VACUUM

总结

扩展 PostgreSQL

扩展介绍

Extension 生态

Gnu/Linux 的输出

Mac 的输出

Extension 的组成

控制文件
脚本文件

管理扩展

创建扩展

查看已安装的扩展

查看可用的扩展版本

更改已有扩展

删除扩展

PGXN 客户端

Debian 系列安装 pgxnclient

RHEL 系列安装 pgxnclient

源码安装 pgxnclient

pgxnclient 命令行介绍

安装扩展

通过 pgxnclient 安装扩展

手工安装扩展

使用安装的扩展

删除已安装的扩展

通过 pgxnclient 删除扩展
删除手工编译的扩展

创建自己的扩展

定义一个扩展

创建扩展文件

安装自定义的扩展

扩展升级

执行扩展升级

总结

调优

语句的执行

执行阶段

优化器

优化器使用的节点

顺序节点
顺序扫描
索引扫描
连接节点
并行节点
收集节点
并行扫描
并行连接
并行聚合
优化器何时选择并行计划?
其他实用节点

节点的成本

索引

索引类型

创建索引

查看索引

删除索引

索引失效

重建索引

EXPLAIN 语句

EXPLAIN 的输出格式

EXPLAIN ANALYZE 语句

EXPLAIN 选项

查询优化示例

ANALYZE 更新统计数据

Auto-explain

总结

日志及审计 01:日志

日志介绍

日志存放哪里

何时记录日志

需要记录什么

使用 pgBadger 抽取日志信息

安装 pgBadger

配置 PostgreSQL 以使用 pgBadger

使用 pgBadger

定时执行 pgBadger

总结

日志及审计 02:审计

实施审计

安装 PgAudit

配置 PostgreSQL 以使用 PgAudit

配置 PgAudit

会话级别审计

角色级别审计

总结

备份及恢复

备份及恢复类型介绍

逻辑备份

单库备份

单库恢复

备份指定的表及序列

压缩

备份格式及 pg_restore

我们查看一下里面的内容

选择性恢复

备份整个集群

并行备份

定时备份

COPY 命令

物理备份

手动物理备份

pg_verifybackup

启动克隆的集群

从物理备份恢复

PITR 背后的基本概念

总结

集群配置

集群配置

查看所有的配置参数

查看配置错误

配置嵌套

配置上下文

主配置相关设置

WAL 配置

其输出如下,仅截取部分输出

内存相关配置
进程信息配置
网络相关配置
归档及同步相关配置
Vacuum 及 autovacuum 相关配置
统计收集

配置修改

生成配置

总结

集群监控

查询及会话相关的信息

检查锁

检查数据库

检查表及索引

更多统计信息

pg_stat_statements

安装 pg_stat_statments 扩展

使用 pg_stat_statments

重置 pg_stat_statements 收集的数据

微调 pg_stat_statments

总结

PostgreSQL 监控实战

安装及配置 PMM 服务端

安装 PMM 服务端

卸载旧的 Docker 软件包

安装及配置 PMM 客户端

安装 PMM 客户端

Debian 系列安装
RHEL 系列安装

PMM 客户端注册

PMM 客户端取消注册

添加服务

创建数据库的 PMM 账号
安装及配置扩展
通过 UI 界面添加
通过命令行添加

删除服务

物理复制

物理复制的基本概念

物理复制及 WALs

wal_level 指令

流复制环境准备

管理流复制

流复制的基本概念

异步复制环境

wal_keep_segments 选项

复制槽

pg_basebackup 命令

异步复制

复制监控

同步复制

PostgreSQL 设置
主节点配置
从节点配置
级联复制
延迟复制

从节点提升为主节点

总结

逻辑复制

逻辑复制的一些基本概念

逻辑复制与物理复制的对比

探索逻辑复制

逻辑复制环境设置

创建复制角色
主服务器的 postgresql.conf
复制服务器的 postgresql.conf
pg_hba.conf 文件

开始配置逻辑复制

监控逻辑复制

只读 vs. 可写

DDL 问题

关闭逻辑复制

同时使用物理复制与逻辑复制

总结

有用的工具及扩展

Exploring the pg_trgm extension

使用 postgres_fdw 扩展

pgloader 迁移工具

从 MySQL 迁移到 PostgreSQL

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

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

相关文章

Observer(观察者模式)

1. 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 在观察者模式中,有两类对象:被观察者(Subject)和观察者(Observer&#xf…

单片机原理与技术

文章目录 一、单片机概述二、单片机的基本原理1. **硬件结构**2. **指令系统** 三、单片机的关键技术1. **编程技术**2. **接口技术**3. **嵌入式系统技术** 四、单片机在现代科技中的应用 一、单片机概述 单片机,全称为单片微型计算机(Single-Chip Mic…

Vue 路由设置

为了防止遗忘,记录一下用Vue写前端配置路由时的过程,方便后续再需要用到时回忆。 一、举个例子 假如需要实现这样的界面逻辑: 在HomePage中有一组选项卡按钮用于导航到子页面,而子页面Page1中有一个按钮,其响应事件是…

笔记-stm32移植ucos

文章目录 一、UCOS的基础知识1.1 前后台系统:1.2 RTOS系统可剥夺型内核:前后台系统和RTOS系统 1.3 UCOS系统简介学习方法 二、ucossii移植Step1:在工程中建立存放UCOSS代码的文件夹UCOSIIStep2:向CORE文件夹添加文件Step3:向Config文件夹添加文件Step4:向port文件夹…

LLM4Rec最新工作: 字节发布用于序列推荐的分层大模型HLLM

前几个月 Meta HSTU 点燃各大厂商对 LLM4Rec 的热情,一时间,探索推荐领域的 Scaling Law、实现推荐的 ChatGPT 时刻、取代传统推荐模型等一系列话题让人兴奋,然而理想有多丰满,现实就有多骨感,尚未有业界公开真正复刻 …

后端复习资料

后端面试资料 语雀-图灵面试题 语雀-javaGuide 小林coding:https://www.xiaolincoding.com/ 面试鸭: https://www.mianshiya.com/ codehot香菜哥:https://codehot.cn/markdown/welfare 面试题: vizard自行整理 牛客Golang社招面…

vscode中配置python虚拟环境

python虚拟环境作用 Python虚拟环境允许你为每个独立的项目创建一个隔离的环境,这样每个项目都可以拥有自己的一套Python安装包和依赖,不会互相影响。实际使用中,可以在vscode或pycharm中使用虚拟环境。 1.创建虚拟环境的方法: …

【NLP自然语言处理】01-基础学习路径简介

目的:让大家能够在 AI-NLP 领域由基础到入门具体安排: NLP介绍 文本预处理RNN 及其变体(涉及案例)Transformer 原理详解迁移学习 和 Bert 模型详解 (涉及案例)特点: 原理 实践每个文章会有练习…

04-SpringBootWeb案例(中)

3. 员工管理 完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。 基于以上原型,我们可以把员工管理功能分为: 分页查询(今天完成)带条件的分页查询(今天完成)删除员工&am…

算法题总结(十)——二叉树上

#二叉树的递归遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer>(); //也可以把result 作为全局变量&#xff0c;只需要一个函数即可。…

Linus Torvalds 要求内核开发人员编写更好的 Git 合并提交信息

昨天在宣布 Linux 6.12-rc2 内核时&#xff0c;Linus Torvalds 要求内核维护者在提交信息方面做得更好。Torvalds 尤其希望内核维护者在描述拉取请求中的变更时&#xff0c;能更好地使用积极、命令式的语气。 Linux创建者在6.12-rc2 公告中解释道&#xff1a; 总之&#xff0c…

论文阅读笔记-XLNet: Generalized Autoregressive Pretraining for Language Understanding

前言 Google发布的XLNet在问答、文本分类、自然语言理解等任务上都大幅超越BERT,XLNet提出一个框架来连接语言建模方法和预训练方法。我们所熟悉的BERT是denoising autoencoding模型,最大的亮点就是能够获取上下文相关的双向特征表示,所以相对于标准语言模型(自回归)的预…

数据结构-基于不同策略的英文单词的词频统计和检索系统

数据结构课程设计:基于不同策略的英文单词的词频统计和检索系统 - 海月CSDN - 博客园 数据结构-基于不同策略的英文单词的词频统计和检索系统-CSDN博客 李冬梅老师课程设计 多学多练习!!!! C/C++在线餐馆预订管理系统_数据结构美团餐馆预订管理信息系统-CSDN博客 高校…

Java之Native详解

在Java编程中&#xff0c;Native方法是一种特殊的方法&#xff0c;它允许Java代码直接调用用其他编程语言&#xff08;如C或C&#xff09;编写的代码。这种机制使得Java程序能够与底层系统资源或其他编程语言进行交互&#xff0c;实现更高效的操作或访问特定功能。本文将详细介…

计算机科学各种协议

tls&#xff1a;TLS” 即 “Transport Layer Security”&#xff08;传输层安全&#xff09; ssl&#xff1a;SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接层&#xff09;协议 Qos&#xff1a;网络服务质量&#xff08;Quality of Service&#xff0c;QoS&#…

前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比

这篇属于番外&#xff0c;属于技术性的讨论文&#xff0c;主要谈一下可能困惑不少人的问题。meteor看似一个前后端混合的框架&#xff0c;但实际上它并不是前后端混合的&#xff0c;只是共享了一个数据结构&#xff08;数据对象&#xff09;。现实中很多团队都说是前后端分离的…

【AIGC】ChatGPT提示词Prompt高效编写模式:结构化Prompt、提示词生成器与单样本/少样本提示

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;结构化Prompt (Structured Prompt)组成元素应用实例优势结论 &#x1f4af;提示词生成器 (Prompt Creator)如何工作应用实例优势结论 &#x1f4af;单样本/少样本提示 (O…

什么是安全运营中心 SOC?

SOC 代表安全运营中心&#xff0c;它是任何企业中负责组织安全、保护企业免受网络风险的单一、集中的团队或职能。 安全运营中心将管理和控制业务运营的所有安全要素&#xff0c;从监控资产到雇用合适的人员和流程&#xff0c;再到检测和应对威胁。 在本文中&#xff0c;我们…

PHP变量(第④篇)

本栏目教学是php零基础到精通&#xff0c;如果你还没有安装php开发工具请查看下方链接&#xff1a; Vscode、小皮面板安装-CSDN博客 今天来讲一讲php中的变量&#xff0c;变量是用于存储信息的"容器"&#xff0c;这些数据可以在程序执行期间被修改&#xff08;即其…

ThinkBook 16+ 锐龙6800h 安装ubuntu键盘失灵

问题&#xff1a;在ThinkBook 16 锐龙6800h 安装ubuntu18.04 出现笔记本键盘按下延迟非常高&#xff0c;输出卡死的情况&#xff0c;但是外接键盘可以正常使用 解决&#xff1a;更新内核 1、进入 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 下载所需内核版本&#x…