PostgreSQL jsonb_populate_recordset() 函数使用指南
PostgreSQL jsonb_populate_recordset() 函数将指定的最顶层的 JSONB 数组转为一个自定义的 SQL 类型值的集合。
jsonb_populate_recordset() 语法
这是 PostgreSQL jsonb_populate_recordset() 函数的语法:
jsonb_populate_recordset(base ANYELEMENT, from_json JSONB) -> ANYELEMENT
参数
base- 必需的。 一个任何数据类型的值。 它指明了数组中的 JSONB 对象要转为的值的类型。
from_json- 必需的。 要转的 JSONB 数组,其中的元素为 JSONB 对象。
返回值
PostgreSQL jsonb_populate_recordset() 函数返回一个自定义的 SQL 类型值的集合,它由指定的 JSONB 数组转化而来。 JSONB 数组中的每个 JSONB 对象都依照 json_populate_record() 函数处理成自定义类型的值。
我们可以使用 CREATE TYPE 创建一个自定义类型,它定义了要输出的列以及每个列的类型。
jsonb_populate_recordset() 示例
本示例展示了如何使用 PostgreSQL jsonb_populate_recordset() 函数将一个 JSONB 数组转为一个自定义 SQL 类型的值。
首先,让我们创建一个自定义的 SQL 类型:
CREATE TYPE my_type as (x TEXT, y INT, z TEXT);
这里,我们创建了一个自定类型 my_type,它包含 3 个列 x, y, 和 z。
然后,让我们使用下面的语句将 JSONB 数组转为 person 的集合:
SELECT
*
FROM
jsonb_populate_recordset(
null::my_type,
'[{"x": "A", "y": 1}, {"x": "B", "y": 2}]'
);
x | y | z
---+---+---
A | 1 |
B | 2 |这里, 由于列 z 在 JSONB 对象没有匹配的字段,因此列 z 中的值为 NULL。如果我们想在列 z 中使用一个固定的值,我们可以使用一个不为 null 的 base 参数:
SELECT
*
FROM
jsonb_populate_recordset(
('x', 0, 'z')::my_type,
'[{"x": "A", "y": 1}, {"x": "B", "y": 2}]'
);
x | y | z
---+---+---
A | 1 | z
B | 2 | z这里,由于 base 参数不为 null 且列 z 在 JSONB 对象没有匹配的字段,因此 base 中的 z 列的值被填充到输出的 z 列中。