我试图将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),而不是将其作为表中的列。
我目前正在尝试做什么?
答案 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