Postgres使用JSONB插入冲突

时间:2016-08-16 16:57:49

标签: postgresql jsonb

我试图将Postgres用作文档存储,并且当我试图有效地插入Postgres解析器似乎不喜欢JSONB运算符的文档时遇到了问题。

我有一张桌子:

CREATE TABLE tbl (data jsonb NOT NULL);
CREATE UNIQUE INDEX ON tbl ((data->>'a'));

我尝试插入数据:

INSERT INTO tbl (data) VALUES ('{ "a": "b" }'::jsonb) 
  ON CONFLICT (data->>a) 
  DO UPDATE SET data = data || '{ "a": "b" }'::jsonb

我收到此错误消息:

ERROR:  syntax error at or near "->>"

我已尝试过数据 - >> a,数据>>' a',数据> a,以及数据>' a&# 39 ;.所有这些都是

我想在JSON中保留标识符列(示例中的a),而不是将其作为表中的列。

我目前正在尝试做什么?

2 个答案:

答案 0 :(得分:7)

您有两个问题:

1)您需要添加其他括号,如下所示:

ON CONFLICT ((data->>'a'))

2)您需要在表格别名前加上data引用,如下所示:

DO UPDATE SET data = tbl.data || '{ "a": "b" }'::jsonb

答案 1 :(得分:0)

通读this PostgreSQL documentation有关此主题的信息。如果您正在尝试构建json解析器,则可能需要使用json_populate_record函数来填充表。另请参阅相关问题: How to perform update operations on columns of type JSONB in Postgres 9.4