Postgresql:使用存储过程的JSON参数插入两个具有有效FK的表

Postgresql:使用存储过程的JSON参数插入两个具有有效FK的表,postgresql,jsonb,Postgresql,Jsonb,我有以下两个表格: CREATE TABLE tableone ( id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ), sampletextone text ); CREATE TABLE tabletwo ( id integer NOT NULL GENE

我有以下两个表格:

CREATE TABLE tableone (
  id            integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
  sampletextone text
);

CREATE TABLE tabletwo (
  id            integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
  tableone_id   int,
  sampletexttwo text
);
将以下
JSON
参数发送到过程:

[
  {
    "sampletextone": "table one text 1",
    "tabletwo": 
      [
        {
            "sampletexttwo": "table two sample one text 1"
        },
        {
            "sampletexttwo": "table two sample one text 2"
        }
      ]
  },
  {
    "sampletextone": "table one text 2",
    "tabletwo": 
      [
        {
            "sampletexttwo": "table two sample one text 3"
        },
        {
            "sampletexttwo": "table two sample one text 4"
        }
      ]
  }
]
我有以下
存储过程

CREATE OR REPLACE procedure testproc(jsonparam json)
  AS 
$BODY$

  WITH ins1 AS (INSERT INTO "tableone" ("sampletextone") 
    SELECT prop->>'sampletextone'
    FROM json_array_elements(jsonparam) prop 
    Returning "id"
 )
 INSERT INTO "tabletwo" ("tableone_id", "sampletexttwo") 
 SELECT ins1."id", 'should be all sample text two'
 FROM ins1
 --JOIN json_array_elements(jsonparam) prop;

$BODY$

LANGUAGE sql;
我试图再次加入
JSON
参数,用
tableone
中的正确外键插入
tabletwo
中的所有四行。我不确定再次加入相关数据的最佳方式是什么

更新:

CREATE OR REPLACE procedure testproc(jsonparam json)
 AS 
$BODY$

 WITH ins1 AS (INSERT INTO "tableone" ("sampletextone") 
 SELECT prop->>'sampletextone'
 FROM json_array_elements(jsonparam) prop 
 Returning "id", "sampletextone"
)
INSERT INTO "tabletwo" ("tableone_id", "sampletexttwo") 
SELECT ins1."id", json_extract_path(prop, 'tabletwo', 'sampletexttwo')
FROM ins1
JOIN json_array_elements(jsonparam) prop ON prop->>'sampletextone' = 
ins1."sampletextone"

$BODY$

LANGUAGE sql;

更新后的
存储过程
仅在
表2中创建了2行,外键正确,而不是4行,
sampletextwo
为空

我找到了答案

CREATE OR REPLACE procedure testproc(jsonparam json)
 AS 
$BODY$

WITH ins1 AS (INSERT INTO "tableone" ("sampletextone") 
 SELECT prop->>'sampletextone'
 FROM json_array_elements(jsonparam) prop 
 Returning "id", "sampletextone"
)
INSERT INTO "tabletwo" ("tableone_id", "sampletexttwo") 
SELECT ins1."id", json_array_elements(json_extract_path(prop, 'tabletwo'))->>'sampletexttwo'
FROM ins1
JOIN json_array_elements(jsonparam) prop ON prop->>'sampletextone' = 
ins1."sampletextone"

$BODY$

LANGUAGE sql;
如果有更好的方法,请告诉我