由 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