PostgreSQL jsonb_to_record() 函数使用指南
PostgreSQL jsonb_to_record()
函数将指定的最顶层的 JSONB 对象扩展为一个在 AS 子句中定义的具有符合类型的行。
jsonb_to_record()
语法
这是 PostgreSQL jsonb_to_record()
函数的语法:
jsonb_to_record(from_json JSONB) -> RECORD
参数
from_json
- 必需的。 要转的 JSONB 对象。
返回值
PostgreSQL jsonb_to_record()
函数返回一个在 AS 子句中定义的 RECORD
类型值,它由指定的 JSONB 对象转换而来。 JSONB 对象都依照 jsonb_populate_record()
函数被转成 RECORD 类型的值。
jsonb_to_record()
示例
本示例展示了如何使用 PostgreSQL jsonb_to_record()
函数将一个 JSONB 对象转为一个具有复杂类型的行。
SELECT
*
FROM
jsonb_to_record(
'{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}'
) AS x(name TEXT, age INT, hobbies TEXT[]);
name | age | hobbies
------+-----+---------------
Tom | 20 | {sports,cars}
这里,我们在 AS
子句中定义了要返回的行类型: AS x(name TEXT, age INT, hobbies TEXT[])
。
您还可以集合自定义的类型使用更复杂的类型。
首先,让我们创建一个自定义的 SQL 类型:
CREATE TYPE address as (country TEXT, city TEXT);
然后将一个更复杂的 JSONB 对象转为行:
SELECT
*
FROM
jsonb_to_record(
'{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"], "address": {"country": "CN", "city": "BeiJing"}}'
) AS x(name TEXT, age INT, hobbies TEXT[], address address);
name | age | hobbies | address
------+-----+---------------+--------------
Tom | 20 | {sports,cars} | (CN,BeiJing)