Вы можете использовать предложение on conflict do nothing
. Ваш столбец id
является первичным ключом таблицы, поэтому это будет работать:
INSERT INTO json_table
SELECT *
FROM json_populate_recordset (NULL::json_table,
'{ "insert": [
{
"id": "1",
"str_col": "Postgres bar data",
"int_col": 3151,
"bool_col": false,
"json_col": {
"data": "tutorials"
},
"float_col": 11.51099159756918
},
{
"id": "2",
"str_col": "Postgres tutorials data data",
"int_col": 4237,
"bool_col": true,
"json_col": {
"type": "type"
},
"float_col": 48.94065780742467
}
]}'::json->'insert')
ON CONFLICT (id) DO NOTHING;
Демо на DB Fiddle
Допустим, эта запись была вставлена раньше:
insert into json_table(id) values(1)
Вышеупомянутый запрос выполняется без ошибок и вставляет только вторую строку.