Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 函数将json数组元素插入表中_Postgresql_Jsonb - Fatal编程技术网

Postgresql 函数将json数组元素插入表中

Postgresql 函数将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

如何编写一个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 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)
$$;

完美的谢谢