postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作

前端之家收集整理的这篇文章主要介绍了postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
查看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;

这是记录在一个明显的地方,我错过了吗?谢谢。

理想情况下,不要对关系数据库中要管理的数据使用JSON文档。请使用规范化的关系设计。

JSON主要用于存储不需要在RDBMS中操作的整个文档。

更新Postgres中的一行总是写一个新版本的整行。这是Postgres’ MVCC model的基本原理。从性能的角度来看,无论是更改JSON对象内的单个数据还是所有内容,都几乎不重要:必须写入新版本的行。

因此advice in the manual

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?

猜你在找的Postgre SQL相关文章