PostgreSQL 18: 反转数组元素的函数 array_reverse

John Doe 五月 9, 2025

PostgreSQL 支持各种各样的集合操作函数。你可以对数组进行排序、行列转化,还有反转等各种操作。

在山坡上奔跑的大象

特性提交日志

添加 SQL 函数array_reverse()

这个函数接受一个数组作为输入,并反转数组中所有元素的位置。和array_shuffle()函数一样,该操作仅影响数组的第一维。

函数的实现结构借鉴了array_shuffle()函数,它包含一个名为array_reverse_n()的子例程。如果未来需要引入更多能够反转数组部分内容的函数,这个子例程可能会派上用场。

讨论https://postgr.es/m/CAJ7c6TMpeO_ke+QGOaAx9xdJuxa7r=49-anMh3G5476e3CX1CA@mail.gmail.com

示例

这个特性看起来相当简单,让我们将 pg_database 表中的 datname 列聚合为数组,来看看它是如何工作的:

-- 查询结果按 oid 排序
$ select array_agg(datname order by oid) from pg_database ;
                   array_agg
----------------------------------------------------
 {template1,template0,postgres,pgdoc,redrock,pgdba}
(1 row)

对上述聚合得到的数组进行反转:

$ select array_reverse(array_agg(datname order by oid)) from pg_database ;
                  array_reverse
----------------------------------------------------
 {pgdba,redrock,pgdoc,postgres,template0,template1}
(1 row)

当然,在这个例子中,我们本可以很轻松地更改聚合函数中的排序子句,但重点在于:现在我们无需编写更复杂的 SQL 语句,就有了反转数组的方法。

非常喜欢 PostgreSQL 添加的这样的小函数,也期待能够看到对数组支持的更多特性。虽然这算不上什么重大更新,但是大量小范围的改进叠加,对于数据库的易用性提升是巨大的。

确实很棒,非常感谢所有社区的相关人员。

参考

提交日志:https://git.postgresql.org/pg/commitdiff/49d6c7d8dabad8c59ba21afe72ff32e79f822291