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;
这是记录在一个明显的地方,我错过了吗?谢谢。
JSON主要用于存储不需要在RDBMS中操作的整个文档。
更新Postgres中的一行总是写一个新版本的整行。这是Postgres’ MVCC model的基本原理。从性能的角度来看,无论是更改JSON对象内的单个数据还是所有内容,都几乎不重要:必须写入新版本的行。
JSON data is subject to the same concurrency-control considerations as
any other data type when stored in a table. Although storing large
documents is practicable,keep in mind that any update acquires a
row-level lock on the whole row. Consider limiting JSON documents to a
manageable size in order to decrease lock contention among updating
transactions. Ideally,JSON documents should each represent an atomic
datum that business rules dictate cannot reasonably be further
subdivided into smaller datums that could be modified independently.
它的要点:要修改JSON对象中的任何内容,必须将修改的对象分配给列。 Postgres提供了有限的手段来构建和操纵json数据以及其存储功能。自9.2版本以来,每个新版本的工具的软件都大大增加。即将到来的version 9.4 is adding quite a bit。
说明如何使用Postgres 9.3的工具:
> How do I modify fields inside the new PostgreSQL JSON datatype?