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
列中。