浏览Postgres 9.4数据类型JSONB的文档时,我并不清楚如何对JSONB列进行更新。

JSONB类型和函数的文档:

http://www.postgresql.org/docs/9.4/static/functions-json.html http://www.postgresql.org/docs/9.4/static/datatype-json.html

作为一个例子,我有这样一个基本的表结构:

CREATE TABLE test(id serial, data jsonb);

插入很容易,比如:

INSERT INTO test(data) values ('{"name": "my-name", "tags": ["tag1", "tag2"]}');

现在,我该如何更新“数据”列呢?这是无效的语法:

UPDATE test SET data->'name' = 'my-other-name' WHERE id = 1;

这是否被记录在我遗漏的某个地方?谢谢。


当前回答

这将在9.5中以jsonb_set的形式出现,由Andrew Dunstan基于现有扩展jsonbx实现,jsonbx可以在9.4中使用

其他回答

更新'name'属性:

UPDATE test SET data=data||'{"name":"my-other-name"}' WHERE id = 1;

如果你想删除'name'和'tags'属性:

UPDATE test SET data=data-'{"name","tags"}'::text[] WHERE id = 1;

这个问题是在postgres 9.4中提出的, 然而,新来的观众应该知道,在postgres 9.5中, 数据库本身支持对JSONB字段的创建/更新/删除操作,不需要扩展功能。

参见:JSONB修改操作符和函数

这将在9.5中以jsonb_set的形式出现,由Andrew Dunstan基于现有扩展jsonbx实现,jsonbx可以在9.4中使用

更新整个专栏对我来说很有效:

UPDATE test SET data='{"name": "my-other-name", "tags": ["tag1", "tag2"]}' where id=1;

Matheus de Oliveira在postgresql中为JSON CRUD操作创建了方便的函数。它们可以使用\i指令导入。注意函数的jsonb分支,如果jsonb是你的数据类型。

9.3 json https://gist.github.com/matheusoliveira/9488951

9.4 JSONB https://gist.github.com/inindev/2219dff96851928c2282