Postgresql 函数将json数组元素插入表中
如何编写一个Postgres函数来接收JSONB数组值并对其进行迭代以在关系表中插入元素 JSONPostgresql 函数将json数组元素插入表中,postgresql,jsonb,Postgresql,Jsonb,如何编写一个Postgres函数来接收JSONB数组值并对其进行迭代以在关系表中插入元素 JSON [{"id": 1, "name": "John"},{"id": 2, "name": "Mary"}] 表格 CREATE TABLE Names ( id INTEGER, name VARCHAR(50) ) 功能 CREATE FUNCTION Insert_Names(IN data JSONB) $$ FOR ... INSERT INTO Names
[{"id": 1, "name": "John"},{"id": 2, "name": "Mary"}]
表格
CREATE TABLE Names (
id INTEGER,
name VARCHAR(50)
)
功能
CREATE FUNCTION
Insert_Names(IN data JSONB)
$$
FOR ...
INSERT INTO Names VALUES (...)
$$
LANGUAGE SQL;
用于解压缩表格和运算符->
,以获取元素的文本值。如有必要,将值强制转换为适当的类型
insert into names
select (elem->>'id')::int, elem->>'name'
from jsonb_array_elements('[{"id": 1, "name": "John"},{"id": 2, "name": "Mary"}]') as arr(elem)
returning *
id | name
----+------
1 | John
2 | Mary
(2 rows)
该函数可能如下所示:
create or replace function insert_names(jsonb)
returns void language sql as $$
insert into names
select (elem->>'id')::int, elem->>'name'
from jsonb_array_elements($1) as arr(elem)
$$;
select insert_names('[{"id": 1, "name": "John"},{"id": 2, "name": "Mary"}]');
或者,您可以使用函数jsonb\u populate\u recordset()
,该函数允许更简单的语法:
create or replace function insert_names(jsonb)
returns void language sql as $$
insert into names
select *
from jsonb_populate_recordset(null::names, $1)
$$;
完美的谢谢