PostgreSQL 支持内置的数组类型,包括多维数组。不仅如此,PostgreSQL 还提供了许多操作和处理数组类型的函数。
PostgreSQL 16 又增加了 2 个新的数组函数:
接下来我们看几个示例。
以下示例每次返回 1 到 10 之间的一个随机数字:
SELECT array_sample(ARRAY[1,2,3,4,5,6,7,8,9,10], 1);
array_sample|
------------+
{2} |
array_sample() 函数包含两个参数,第一个参数是一个数组,第二个参数是抽样结果的个数。该函数的返回类型仍然是数组。
以下示例每次返回 3 个随机数字:
SELECT array_sample(ARRAY[1,2,3,4,5,6,7,8,9,10], 3);
array_sample|
------------+
{9,1,3} |
对于多维数组,抽样操作基于第一个维度返回元素。例如:
SELECT array_sample(ARRAY[[1,2],[3,4],[5,6],[7,8],[9,10]], 3);
array_sample |
--------------------+
{{3,4},{1,2},{9,10}}|
array_sample() 函数的第二个参数不能大于数组的第一个维度的长度,否则将会返回错误。例如:
SELECT array_sample(ARRAY[[1,2],[3,4],[5,6],[7,8],[9,10]], 6);
SQL 错误 [22023]: 错误: sample size must be between 0 and 5
array_shuffle() 函数可以基于数组的第一个维度将元素进行随机排序(洗牌)。例如:
SELECT array_shuffle(ARRAY['a','b','c','d','e','f']);
array_shuffle|
-------------+
{f,c,e,b,a,d}|
SELECT array_shuffle(ARRAY[['a','b'],['c','d'],['e','f']]);
array_shuffle |
-------------------+
{{c,d},{a,b},{e,f}}|
除了第一个维度之外,其他维度上的元素顺序仍然保存不变。