【发布时间】:2017-11-16 20:42:42
【问题描述】:
如果在 Postgres 函数中有一个带有键但没有值的 JSON 对象,我希望能够ignore 或防止INSERT 发生。这是一个人为的小例子:
DROP TABLE IF EXISTS mytable;
create table mytable(
a text,
b text
);
CREATE OR REPLACE FUNCTION insert_to_table(
somedata JSONB
)
RETURNS VOID AS $$
BEGIN
insert into mytable (a, b) select a,b from jsonb_populate_recordset(null::mytable, $1::jsonb);
END;
$$ LANGUAGE plpgsql;
select insert_to_table('[{"a":1,"b":2},{"a":3,"b":4}, {"a":null, "b": null}, {"a": null, "b": "some data"}]');
这将插入 4 条记录,第一行是 1,2,下一行是 3,4。第三行是"", "",第四行是"", some data。
在这种情况下,第 1、2 和 4 行是有效的。我想忽略 3 并阻止它被插入。
我不想要一个空白行,我的数据/表格将比列出的要大得多(表格中大约有 20 个字段,JSON 中有 20 个键/值对)。
很可能我需要遍历数组并挑选出所有键均为空且不仅仅是 1 或 2 的 JSON 对象。
我该怎么做?
【问题讨论】:
标签: sql json postgresql insert plpgsql