PostgreSQL 16 BETA1特性

性能提升

  • PostgreSQL 16 在查询执行方面包括了性能提升。该版本增加了更多的查询并行性,包括允许 FULL 和 RIGHT 连接并行执行,以及 string_agg 和 array_agg 聚合函数的并行执行。此外,PostgreSQL 16 可以在 SELECT DISTINCT 查询中使用增量排序。还有一些优化窗口查询、RANGE 和 LIST 分区查找的改进,并支持 RIGHT 和 OUTER 查询中的“反连接”。

  • PostgreSQL 16 还可以通过 COPY 并发批量加载数据来提高性能,最高可达 300%。

  • 该版本还引入了支持 x86 和 ARM 架构的 CPU 加速,并为 ASCII 和 JSON 字符串处理、数组和子事务搜索提供了优化。此外,PostgreSQL 16 还引入了负载均衡到 libpq 中,这是 PostgreSQL 的客户端库。

阅读详情

查看PostgreSQL数据目录,程序路径,配置文件

查看PostgreSQL数据目录,程序路径,配置文件

ps aux |grep postgres
postgres  9648  0.0  0.3 240824 47648 ?        Ss   Jun20   0:33 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf
postgres  9650  0.0  0.1 241032 15116 ?        Ss   Jun20   0:00 postgres: 14/main: checkpointer
postgres  9651  0.0  0.0 241000 11052 ?        Ss   Jun20   0:03 postgres: 14/main: background writer
postgres  9652  0.0  0.1 240824 12564 ?        Ss   Jun20   0:04 postgres: 14/main: walwriter
postgres  9653  0.0  0.0 241672 11712 ?        Ss   Jun20   0:17 postgres: 14/main: autovacuum launcher

其中
/usr/lib/postgresql/14/bin/postgres 程序目录
/var/lib/postgresql/14/main 是数据库目录
/etc/postgresql/14/main/postgresql.conf 配置文件

PostgreSQL 11 特性

分区的可靠性和性能提升

PostgreSQL 11增加了哈希键(也称为哈希分区)来分区数据的能力,进一步完善了PostgreSQL通过值列表或范围对数据进行分区的功能。 PostgreSQL 11还通过改进PostgreSQL外部数据封装器postgres_fdw使用的分区功能来提高其数据联合能力。

为了帮助管理分区,PostgreSQL 11引入了一个捕获所有未匹配分区键数据的默认分区,并且可以在传递到所有分区的分区表上创建主键、外键、索引和触发器。如果更新了该行的分区键,则PostgreSQL 11还支持将行自动移动到正确的分区。

PostgreSQL 11通过使用新的分区消除策略,提高了从分区中读取时的查询性能。此外,PostgreSQL 11现在支持在分区表上流行的“upsert”功能,帮助用户简化应用程序代码并在与其数据交互时减少网络开销。

存储过程中支持事务

开发人员可以在PostgreSQL中创建用户定义函数已经超过20年,但在PostgreSQL 11之前,这些函数无法管理自己的事务。PostgreSQL 11添加了SQL过程,可在函数体内执行完整的事务管理,使开发人员能够创建更高级的服务器端应用程序,例如涉及增量批量数据加载的应用程序。

使用CREATE PROCEDURE命令可以创建SQL过程,使用CALL命令执行,并由服务器端过程语言PL/pgSQL、PL/Perl、PL/Python和PL/Tcl支持。

查询并行性的增强功能

PostgreSQL 11提高了并行查询性能,在并行顺序扫描和哈希连接方面实现性能提升,并更有效地扫描分区数据。如果底层查询无法并行化,则PostgreSQL现在可以并行执行使用UNION的SELECT查询。

PostgreSQL 11将并行性添加到几个数据定义命令中,特别是用于通过执行标准的CREATE INDEX命令生成B-tree索引的命令。现在还可以并行处理从查询创建表或材料化视图的多个数据定义命令,包括CREATE TABLE .. AS、SELECT INTO和CREATE MATERIALIZED VIEW。

表达式的即时编译(JIT)

PostgreSQL 11引入了对即时编译(JIT)的支持,以加速查询执行期间某些表达式的执行。 PostgreSQL的JIT表达式编译使用LLVM项目来加速WHERE子句、目标列表、聚合、投影和一些内部操作中表达式的执行。

要利用JIT编译,您需要安装LLVM依赖项,并在PostgreSQL设置文件中设置jit = on或在PostgreSQL会话中执行SET jit = on以启用JIT编译。

用户体验改进

PostgreSQL关系数据库的增强功能离不开活跃用户社区的反馈和PostgreSQL工作人员的辛勤工作。以下是PostgreSQL 11包含的旨在改善总体用户体验的许多功能中的几个亮点:

消除了ALTER TABLE .. ADD COLUMN .. DEFAULT ..需要使用非空默认值重写整个表的需求,在执行此命令时提供了显着的性能提升。
“Covering indexes”允许用户使用INCLUDE子句向索引添加其他列,并有助于执行基于索引的扫描,尤其是在不可通过B-tree索引进行索引的数据类型上。
增加了窗口函数的其他功能,包括允许RANGE使用PRECEDING/FOLLOWING、GROUPS和frame exclusion。
在PostgreSQL命令行界面中包含了关键字“quit”和“exit”,帮助使离开命令行工具更加容易。

PostgreSQL 12 特性

显著的性能提升

PostgreSQL 12提供了显著的性能和维护增强,针对其索引系统和分区进行了优化。

PostgreSQL中标准的B-tree索引已经优化,以更好地处理频繁修改索引的工作负载。使用TPC-C基准测试的适度实现,在平均使用空间上减少了40%,并且整体查询性能有所提高。

分区表的查询也得到明显改进,特别是对于仅需要从有限子集检索数据的数千个分区的表。PostgreSQL 12还提高了在使用INSERT和COPY向分区表添加数据的性能,并具有在不阻塞查询的情况下将新分区附加到表的功能。

此外,PostgreSQL 12中的索引还有其他增强功能,包括GiST、GIN和SP-GiST索引类型在write-ahead日志生成中降低开销,可以在GiST索引上创建covering索引(包括子句),可以使用SP-GiST索引使用距离运算符(<->)执行K最近邻查询,CREATE STATISTICS现在支持最常见值(MCV)统计信息,可帮助在使用非均匀分布的列时生成更好的查询计划。

使用LLVM引入的即时编译(JIT)在PostgreSQL 11中启用,现在默认启用。 JIT编译可以为WHERE子句、目标列表、聚合和一些内部操作的执行提供性能优势,并且如果您的PostgreSQL安装使用LLVM进行编译或打包,则可用。

SQL合规性和功能增强

PostgreSQL因其符合SQL标准而闻名-这也是它从“POSTGRES”重命名为“PostgreSQL”的原因之一-PostgreSQL 12添加了几个功能来继续实现SQL标准与增强功能。

PostgreSQL 12介绍了使用SQL/JSON标准中定义的JSON路径表达式在JSON文档上运行查询的能力。这样的查询可以利用存储在JSONB格式中的文档的现有索引机制有效地检索数据。

通用表达式,也称为WITH查询,现在可以自动内联PostgreSQL 12,从而可以帮助提高许多现有查询的性能。在此版本中,如果WITH查询不是递归的,没有任何副作用,并且仅在查询后期引用一次,则可以内联WITH查询。

PostgreSQL 12引入了“生成列”。在SQL标准中定义,此列类型会从表中其他列的内容计算其值。在此版本中,PostgreSQL支持“存储生成列”,其中计算得出的值存储在磁盘上。

国际化

PostgreSQL 12通过允许用户定义“不确定性排序”来扩展它对ICU排序的支持,例如允许不区分大小写或不考虑口音的比较。

身份验证

PostgreSQL通过几个增强功能扩展了其强大的身份验证方法支持,提供了额外的安全性和功能。本版本引入了通过GSSAPI接口进行身份验证的客户端和服务器端加密,以及如果PostgreSQL使用OpenLDAP进行编译,则可以发现LDAP服务器的能力。

此外,PostgreSQL 12现在支持一种多因素身份验证形式。 PostgreSQL服务器现在可以要求认证客户端使用clientcert= verify-full选项提供带有其用户名的有效SSL证书,并将其与其他认证方法(例如scram-sha-256)的要求相结合。

管理

PostgreSQL 12引入了REINDEX CONCURRENTLY命令,可以重建索引而不会阻止对索引的写入,从而允许用户避免为索引重建长时间导致停机的情况。

此外,PostgreSQL 12现在可以使用pg_checksums命令在离线集群中启用或禁用页面校验和。先前,页面校验和是一项用于验证存储在磁盘上数据完整性的功能,只能在初始化initdb时启用PostgreSQL群集。

原文:

https://www.postgresql.org/about/news/postgresql-12-released-1976/

PostgreSQL 13 特性

持续性能提升

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

PostgreSQL 13 引入增量排序,在查询的早期步骤中已排序的数据可以加速后续排序。此外,PostgreSQL 现在可以使用扩展统计系统(通过 CREATE STATISTICS 访问)为 OR 子句和 IN/ANY 查找列表的查询创建改进的计划。

在 PostgreSQL 13 中,更多类型的聚合和分组集查询可以利用 PostgreSQL 的高效哈希聚合功能,因为具有大型聚合的查询不必完全适合内存中。具有分区表的查询已获得性能提升,因为现在可以更多地剪枝分区,并且可以直接连接分区的情况更多。

管理优化

VACUUM 是 PostgreSQL 管理的关键部分,使数据库能够在更新和删除行后回收存储空间。虽然此过程也可能存在管理挑战,但是之前的 PostgreSQL 发布版已经努力减轻 VACUUM 的开销。

PostgreSQL 13 不断改进清理系统,引入并行索引清理。除了提供清理性能优势外,这个新特性的使用可以针对特定的工作负载进行调整,因为管理员可以选择运行的并行工作程序数。除了这些性能优势外,插入数据现在可以触发 autovacuum 进程。

复制槽用于防止副本接收 write-ahead 日志(WAL)之前被删除。在 PostgreSQL 13 中,可以调整复制槽以指定保留的 WAL 文件的最大数量,以避免磁盘空间不足错误。

PostgreSQL 13 还添加了更多管理员可以监视数据库活动的方式,包括从 EXPLAIN 引用 WAL 使用统计信息、流式基本备份的进度以及 ANALYZE 命令的进度。此外,可以使用新的 pg_verifybackup 命令检查 pg_basebackup 命令的输出的完整性。

应用程序开发便利性

PostgreSQL 13 使从不同数据源导入 PostgreSQL 数据类型变得更加容易。此版本将 datetime() 函数添加到其 SQL/JSON 路径支持中,该函数可以将有效的时间格式(例如 ISO 8601 字符串)转换为 PostgreSQL 本机类型。此外,UUID v4 生成函数 gen_random_uuid() 现在可用,无需安装任何扩展即可使用。

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

在 PostgreSQL 13 中,FETCH FIRST 语法现在扩展为包括 WITH TIES 子句。当指定时,WITH TIES 包括根据 ORDER BY 子句与结果集中的最后一行“相等”的任何行。

安全增强

PostgreSQL 的扩展系统是其强大性的关键部分,因为它允许开发人员扩展其功能。在之前的发布版中,只有数据库超级用户才能安装新扩展。为了更方便地利用 PostgreSQL 的可扩展性,PostgreSQL 13 添加了“可信任扩展”的概念,允许数据库用户安装超级用户标记为“可信任”的扩展。某些内置扩展默认为可信任扩展,包括 pgcrypto、tablefunc、hstore 等。

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

原文:

https://www.postgresql.org/about/news/postgresql-13-released-2077/

PostgreSQL 14 特性

JSON便捷操作与多范围

自PostgreSQL 9.2发布以来,PostgreSQL一直支持操作JSON数据,尽管值的检索使用了独特的语法。PostgreSQL 14现在允许您使用下标访问JSON数据,例如,类似于 SELECT (‘{ “postgres”: { “release”: 14 }}’::jsonb)[‘postgres’][‘release’]; 的查询现在可以正常工作。这使PostgreSQL与从JSON数据中检索信息常用的语法保持一致。PostgreSQL 14增加的下标框架可以通用扩展到其他嵌套数据结构,并且也应用于此版本的hstore数据类型。

范围类型,也是在PostgreSQL 9.2中首次发布,现在通过引入”多范围”数据类型来支持非连续范围。多范围是一个有序的,非重叠的范围列表,这让开发人员可以为处理复杂范围序列编写更简单的查询。PostgreSQL原生的范围类型(日期,时间,数字)支持多范围,其他数据类型也可以扩展使用多范围支持。

对大工作负载的性能提升

PostgreSQL 14在使用许多连接的工作负载上提供了显著的吞吐量提升,一些基准测试显示速度提升了2倍。此版本继续对B-tree索引的管理进行了最近的改进,通过减少在经常更新索引的表上的索引膨胀。

PostgreSQL 14引入了向数据库管道查询的能力,这可以显著提高高延迟连接或许多小型写入(INSERT/UPDATE/DELETE)操作的工作负载的性能。由于这是一个客户端特性,你可以使用管道模式与任何现代的PostgreSQL数据库以及版本14的客户端或使用libpq的版本14构建的客户端驱动程序。

分布式工作负载的增强

使用逻辑复制时,分布式PostgreSQL数据库将从PostgreSQL 14中受益。PostgreSQL现在可以将进行中的事务流式传输到订阅者,这对于在订阅者上应用大事务带来了显著的性能优势。PostgreSQL 14还对支持逻辑复制的逻辑解码系统进行了几项性能改进。

用于在PostgreSQL和其他数据库之间处理联合工作负载的外部数据包装器现在可以在PostgreSQL 14中利用查询并行性。此版本在postgres_fdw中实现了此功能,postgres_fdw是与其他PostgreSQL数据库接口的外部数据包装器。

除了支持查询并行性外,postgres_fdw现在还可以在外部表上批量插入数据,并使用IMPORT FOREIGN SCHEMA指令导入表分区。

管理和可观察性

PostgreSQL 14将其性能提升扩展到了清理系统,包括用于减少B-Trees的开销的优化。此版本还添加了一个清理”紧急模式”,旨在防止事务ID环绕。用于收集数据库统计信息的ANALYZE,由于其自身的性能改进,现在在PostgreSQL 14中运行得更快。

对于PostgreSQL的TOAST系统,它用于存储较大的数据,如文本块或几何图形,现在可以进行配置。PostgreSQL 14在保留对pglz压缩的支持的同时为TOAST列添加了LZ4压缩。

PostgreSQL 14添加了几个新特性以帮助监控和可观察性,包括跟踪COPY命令的进度,预写日志(WAL)活动,和复制插槽的统计信息。启用compute_query_id可以让你通过几个PostgreSQL特性唯一跟踪一个查询,包括pg_stat_activity,EXPLAIN VERBOSE,等等。

SQL性能,一致性,和便捷性

查询计划和执行受益于PostgreSQL 14的增强。此版本包括了对PostgreSQL查询并行性支持的几个改进,包括并行顺序扫描的性能提升,使PL/pgSQL在使用RETURN QUERY命令时执行并行查询,以及使REFRESH MATERIALIZED VIEW执行并行查询的能力。此外,使用嵌套循环连接的查询可能会通过PostgreSQL 14添加的额外缓存看到性能好处。

现在可以在PostgreSQL 14中使用扩展的统计信息。此外,窗口函数现在可以受益于增量排序,这是一个在PostgreSQL 13中引入的特性。

存储过程,它允许在一段代码中控制事务,现在可以通过使用OUT参数返回数据。

PostgreSQL 14引入了使用date_bin函数将时间戳”分箱”,或对齐到特定间隔的能力。此版本还添加了符合SQL的SEARCH和CYCLE子句,以帮助排序和递归公共表达式的循环检测。

安全增强

PostgreSQL 14通过使用pg_read_all_data和pg_write_all_data预定义角色,方便地为用户分配对表、视图和模式的只读和只写权限。

此外,该版本现在将符合标准的SCRAM-SHA-256密码管理和身份验证系统设置为新的PostgreSQL实例的默认值

原文:

https://www.postgresql.org/about/news/postgresql-14-released-2318/

PostgreSQL 15 特性

改进排序性能和压缩

在最新版本中,PostgreSQL对其内存和磁盘排序算法进行了改进,基准测试显示,根据排序的数据类型,速度提升了25% – 400%。使用row_number()、rank()、dense_rank()和count()作为窗口函数在PostgreSQL 15中也有性能优势。现在可以并行执行使用SELECT DISTINCT的查询。

基于前一个PostgreSQL版本的异步远程查询的工作,PostgreSQL外部数据包装器postgres_fdw现在支持异步提交。

PostgreSQL 15的性能改进扩展到其存档和备份设施。PostgreSQL 15为写前日志(WAL)文件添加了对LZ4和Zstandard (zstd)压缩的支持,这对某些工作负载可能具有空间和性能优势。在某些操作系统上,PostgreSQL 15支持预获取WAL中引用的页面,以帮助加快恢复时间。PostgreSQL的内置备份命令pg_basebackup,现在支持服务器端压缩备份文件,可以选择gzip、LZ4和zstd。PostgreSQL 15包括使用自定义模块进行归档的能力,这消除了使用shell命令的开销。

表达开发者特性

PostgreSQL 15包括SQL标准MERGE命令。MERGE允许你编写包含INSERT、UPDATE和DELETE操作的条件SQL语句。

这个最新版本增加了使用正则表达式查看字符串的新函数:regexp_count()、regexp_instr()、regexp_like()和regexp_substr()。PostgreSQL 15还扩展了range_agg函数,以聚合在上一版本中引入的多范围数据类型。

PostgreSQL 15允许用户创建使用调用者而非视图创建者的权限查询数据的视图。这个选项,称为security_invoker,增加了一层保护,以确保视图调用者有处理底层数据的正确权限。

更多逻辑复制选项

PostgreSQL 15提供了更多灵活的逻辑复制管理选项。此版本引入了对发布者的行过滤和列列表,让用户可以选择复制表中的一部分数据。PostgreSQL 15增加了简化冲突管理的功能,包括跳过回放冲突事务的能力,以及在检测到错误时自动禁用订阅的能力。此版本还支持在逻辑复制中使用两阶段提交(2PC)。

日志和配置增强

PostgreSQL 15引入了一种新的日志格式:jsonlog。这种新格式使用定义的JSON结构输出日志数据,允许PostgreSQL日志在结构化日志系统中被处理。

此版本让数据库管理员在用户如何管理PostgreSQL配置方面具有更多的灵活性,增加了授予用户修改服务器

级配置参数权限的能力。此外,用户现在可以使用psql命令行工具的\dconfig命令搜索关于配置的信息。

其他改变

PostgreSQL服务器级别的统计现在在共享内存中收集,从而消除了统计收集器进程和定期将此数据写入磁盘的需要。

PostgreSQL 15使得可以将ICU排序规则设为群集或单个数据库的默认排序规则。

此版本还增加了一个新的内置扩展,pg_walinspect,该扩展让用户可以直接从SQL接口查看写前日志文件的内容。

PostgreSQL 15还从公共(或默认)模式中撤销了所有用户除数据库所有者外的CREATE权限。

PostgreSQL 15从PL/Python中移除了长期被弃用的”exclusive backup”模式和对Python 2的支持。

原文:

https://www.postgresql.org/about/news/postgresql-15-released-2526/