PostgreSQL 13 正式发布

2020年09月25日

PostgreSQL 13 已正式发布,新版本对索引和查找系统进行了重大改进,大型数据库因此受益甚多,包括节省了空间并提高了索引的性能,使用聚合或分区的查询的响应时间更快,使用增强的统计信息时更好的查询计划(query planning)等。

除了并行化清理(parallelized vacuuming)和增量排序(incremental sorting)等呼声较高的功能外,PostgreSQL 13 还为大大小小的工作负载提供了更好的数据管理体验,并对日常管理进行了优化,为应用开发者提供了更多便利,并增强了安全性。

性能提升

在先前 PostgreSQL 版本的基础上,PostgreSQL 13 可以有效地处理 B 树索引(PostgreSQL 的标准索引)中的重复数据,从而降低 B 树索引所需的整体空间使用率,同时提高了整体查询性能。

PostgreSQL 13 引入了增量排序,即在查询中较早步骤的排序数据可以加速后面步骤的排序。此外,PostgreSQL 现在可以使用扩展的统计信息(可通过CREATE STATISTICS访问)来为带有OR子句和INANY查找列表的查询创建改进的计划。

在 PostgreSQL 13 中,更多类型的聚合查询和分组查询可以利用 PostgreSQL 的高效哈希聚合功能,因为具有大型聚合的查询不必完全放入内存。对分区表的查询也得到了性能提升,因为现在有更多的情况下可以修剪分区和直接联接分区。

优化管理

清理(Vacuuming)是 PostgreSQL 管理的一个重要部分,使数据库在更新和删除行后能够回收存储空间。此过程也会带来管理上的挑战,尽管之前的 PostgreSQL 版本已经做了一些工作来减轻清理的开销。

PostgreSQL 13 通过引入用于索引的并行化清理来继续改进清理系统 。具体来说,VACUUM 命令能够并行处理索引。可以使用 VACUUM 命令上的新 PARALLEL 选项(或 vacuumdb 上的 --parallel)来访问其功能,该选项允许用户指定用于清理索引的并行 Worker 进程的数量。要注意的是,这不适用于 FULL 选项。由于管理员可以选择要运行的并行 Worker 进程的数量,因此可以针对特定的工作负载调整此新功能的使用。除了这些性能优势之外,数据插入现在还可以触发自动清理过程。

复制插槽(Replication slots),用于防止在复制副本接收到预写日志(WAL, write-ahead logs)之前将其删除,现在可在 PostgreSQL 13 中进行调整,以指定要保留的 WAL 文件的最大数量, 有助于避免磁盘空间不足错误。

PostgreSQL 13 还增加了更多让管理员可以监控数据库活动的方法,包括从 EXPLAIN 中查看 WAL 使用情况的统计信息、流式基础备份的进度,以及 ANALYZE 命令的进度。此外,可以使用新的 pg_verifybackup 命令验证 pg_basebackup 命令输出的完整性。

应用开发

PostgreSQL 13 对来自不同数据源的 PostgreSQL 数据类型进行了优化。此版本在其 SQL/JSON 路径支持中增加了datetime()函数,它可以将有效的时间格式(如 ISO 8601 字符串)转换为 PostgreSQL 原生类型。此外,UUID v4 生成函数 gen_random_uuid() 现在无需安装任何扩展即可使用。

PostgreSQL 分区系统更加灵活,因为分区表完全支持逻辑复制和 BEFORE 行级触发器。

PostgreSQL 13 中的FETCH FIRST语法现已扩展为可包含WITH TIES子句。 指定时,WITH TIES包括基于ORDER BY子句的结果集中最后一行相匹配的任何其他行。

安全性增强

在之前的版本中,新扩展只能由数据库超级用户安装。为了更容易利用 PostgreSQL 的扩展性,PostgreSQL 13 增加了“可信扩展”的概念——允许数据库用户安装超级用户标记为“可信”的扩展。某些内置扩展默认被标记为“可信”,包括pgcryptotablefunchstore等。

对于需要安全认证方法的应用,PostgreSQL 13 允许客户端在使用 SCRAM 身份认证时要求通道绑定,并且 PostgreSQL 外部数据包装器(postgres_fdw)现在可以使用基于证书的认证。

详情查看发布公告

下载地址:https://www.postgresql.org/download/

展开阅读全文
10 收藏
分享
加载中
精彩评论
语法:PostgreSQL 号称世界上最先进的数据库多年,SQL标准中的功能算是各大数据库中支持最全的。与MySQL相比,高级点的功能在PG中SQL就能搞定,而使用MySQL你得取出数来,在开发端写算法搞定。
性能上,百万行数据插入,PG耗时比MySQL少,之前对比一次过为三分之一。在具体开发上,由于PG支持功能丰富,一些需求可以一个SQL搞定,因此性能上一般比使用MySQL时使用代码自己处理效率高点,当然具体情况要具体分析。
!!!!但是,但是!!!!
MySQL比PG流行,在国内MySQL用得要比PG多得多,有得程序员甚至还没有听说过PG。
现在MySQL在国内的教程,文档(经验,填坑历史,人才),在业界得工具,产品,开发(框架,云等)等周边支持上都比PG丰富得多,总得下来,给我得感觉,MySQL使用起来显得“简单,容易,事少,如果单单只是做OLTP开发,MySQL就显得优势明显了。
2020-09-27 10:07
12
举报
生产环境已升级到 PostgreSQL 13 希望 PG 越来越好
2020-09-25 08:33
12
举报
pg最先进也是最傻的数据库了,类型转换要命的难受,联合查询Null也会和时间类型不匹配,日期类型不能用''作为空值,日期类型也不能不传''单引号,不传会提示int不能用于日期。糟糕透顶,满世界都是::类型转换,视图还给你格式化一下,if类似的判断还莫名其妙的给你加上类型转换。定义函数返回值,虽然有泛型可是傻傻的报错。定义的函数大多只能传入字段,不能传入值,否则也报错。查询性能尚可,比sqlserver2019慢一半的样子,而mysql8又比pg13慢一半的样子,指的是包含不少子查询的情况下。pg13这个类型处理不改,真的很劝退。只能用太傻来形容了,好歹按字段类型自己转换一下,为什么就直接报错了。
2020-09-30 12:47
8
举报
一个SQL搞定,通常并不是什么好的方案
2020-09-30 10:52
4
举报
Great! 甩开MySQL一百条街。
2020-09-25 08:17
4
举报
最新评论 (36)
PostgreSQL 版本应该怎么选
2020-10-06 11:32
0
回复
举报
真好,我用mysql
2020-10-03 19:55
1
回复
举报
pg最先进也是最傻的数据库了,类型转换要命的难受,联合查询Null也会和时间类型不匹配,日期类型不能用''作为空值,日期类型也不能不传''单引号,不传会提示int不能用于日期。糟糕透顶,满世界都是::类型转换,视图还给你格式化一下,if类似的判断还莫名其妙的给你加上类型转换。定义函数返回值,虽然有泛型可是傻傻的报错。定义的函数大多只能传入字段,不能传入值,否则也报错。查询性能尚可,比sqlserver2019慢一半的样子,而mysql8又比pg13慢一半的样子,指的是包含不少子查询的情况下。pg13这个类型处理不改,真的很劝退。只能用太傻来形容了,好歹按字段类型自己转换一下,为什么就直接报错了。
2020-09-30 12:47
8
回复
举报
一点没错,pg充满了学术气质,where 1 不行,必须要 where 1=1,字段长度超过了也不能自动截断,不够接地气,用过一次直接劝退
2020-10-02 19:30
1
回复
举报
相比 mysql,权限管理复杂,数据导入导出麻烦;用起来还是有点小小的麻烦
2020-10-05 23:30
0
回复
举报
做过一个oracle迁移到pg的项目。就是上面回答那样,要吐血了。类型问题太头大。
2020-10-06 07:18
1
回复
举报
给个默认值行不,他这个应该是没有默认值会爆个错
2020-10-06 16:11
0
回复
举报
全部都有默认值,伤透了
2020-10-07 23:22
0
回复
举报
这里有一部分可能是使用习惯的问题。PG的风格比较严格,不符合SQL标准或者容易歧义的SQL都会禁止执行。数据库对进入的SQL太放松未必是好事,MySQL就是一个反例,容易将非法数据入库,比如字符串截断,非法日期值等。现在MySQL也通过sql_mode加强SQL严格性。关于类型转换的问题,PG可以通过unknown类型简化类型转换,具体到Java应用,可以在JDBC连接URL里配置连接参数 stringtype = unspecified让驱动以unknown类型传参
2020-10-10 23:50
0
回复
举报
通过严谨来掩饰拙劣我觉得不是一个好说辞,严谨可以装13,可不能当饭吃吗,类型转换可不是一个小问题,离谱夸张到极点,世界上还能找到类似的吗
2020-10-17 05:19
0
回复
举报
还在用pg96,没用任何高级特性,仅当 增删改查 用,能无缝升到 13 吗?
2020-09-30 09:02
0
回复
举报
无缝是不可能的,你至少得重启一次切换实例,官方有个主备迁移方案,比较麻烦。如果你的数据库容量不大我建议还是dump_all再还原吧,重启一下就变新实例。当然在这之前你得先更新你的程序的driver,比如JDBC之类的,以便支持到PG 13
2020-09-30 09:17
0
回复
举报
哈哈哈哈,谢谢。。。谢谢回复~
我就是小项目,重启自然没事;容量也不大,dump and import 也可以~

driver 也要更新啊~ 这就复杂了一些,毕竟要重新编译所有的应用程序~
2020-09-30 11:21
0
回复
举报
你可以查一下你现在用的driver的版本,是否支持PG13,如果支持就不用升级,否则就得升级driver
2020-09-30 11:25
0
回复
举报
docker怎么升级呢?
2020-09-25 15:25
0
回复
举报
内置连接池没上
2020-09-25 14:20
0
回复
举报
看来pg要成为套壳数据库的内核了,数据库里的linux内核的地位?????
2020-09-25 11:54
2
回复
举报
还在用pg96的通过~
2020-09-25 10:28
0
回复
举报
我们还在用9.3
2020-09-25 10:21
0
回复
举报
去年 OSCHINA 很大胆的更新到了 PostgeSQL 10 ,没想到今年13都发布了。
2020-09-25 10:05
1
回复
举报
osc是pg?
2020-09-25 13:39
0
回复
举报
mysql 和 pg 都在用
2020-09-25 13:41
1
回复
举报
更多评论
36 评论
10 收藏
分享
返回顶部
顶部