V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX  ›  PostgreSQL

postgresql 同一张表里多个字段都是 json 或 jsonb 的设计合理吗

  •  
  •   imherer · 2018-10-30 15:34:34 +08:00 · 2825 次点击
    这是一个创建于 2218 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假如有一张表有如下字段: c1,c2,c3 这 3 个字段,其中 c3 类型为 json,假如 c3 里只有部分 key 会频繁的更新,但我看更新的时候好像必须得 update 整个 c3 字段,我是不是可以把 c3 里经常更新的 key 再拆为多个 column,单独更新他们,但是不知道同一张表里 json 字段太多了会不会有什么性能上的问题

    主要是考虑性能方面的问题,这种设计有没有什么问题

    12 条回复    2018-11-19 17:14:33 +08:00
    xyjincan
        1
    xyjincan  
       2018-10-30 16:37:13 +08:00
    m
    lorazepam
        2
    lorazepam  
       2018-10-30 17:20:28 +08:00
    ```
    jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)

    [{"f1":[2,3,4],"f2":null},2,null,3]
    ```
    怎么会 update 整个字段?
    imherer
        3
    imherer  
    OP
       2018-10-30 17:43:17 +08:00
    @lorazepam 刚接触 postgresql,请教下
    ````
    {
    "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",
    "name": "Angela Barton",
    "is_active": true,
    "company": "Magnafone",
    "address": "178 Howard Place, Gulf, Washington, 702",
    "registered": "2009-11-07T08:53:22 +08:00",
    "latitude": 19.793713,
    "longitude": 86.513373,
    "tags": [
    "enim",
    "aliquip",
    "qui"
    ]}
    ````
    假如这一的 json,我只更新 tags 的话 sql 应该怎么写呢?条件是 guid
    EchoUtopia
        4
    EchoUtopia  
       2018-10-30 17:52:04 +08:00 via Android
    @lorazepam jsonb_set 完了不是还要赋值回去么?
    imherer
        5
    imherer  
    OP
       2018-10-30 18:04:55 +08:00
    @EchoUtopia
    @lorazepam
    好像是啊,我看了文档里 jsonb_set 只是改变当前 json 的值,我是要把这个改变更新到库里去
    只能整个字段更新吧好像?
    xyjincan
        6
    xyjincan  
       2018-10-30 18:13:22 +08:00 via Android
    把变动少的,不变的属性拿出来
    n2ex2
        7
    n2ex2  
       2018-10-30 18:17:41 +08:00 via iPhone
    肯定不是更新整个字段,不然就不需要 json 类型,用字符串就完了。
    n2ex2
        8
    n2ex2  
       2018-10-30 18:18:54 +08:00 via iPhone
    json 操作以前看过有些复杂,如果你的 json 不长的话其实可以不用。
    imherer
        9
    imherer  
    OP
       2018-10-31 09:27:57 +08:00
    @xyjincan 嗯,我也是想按更新频繁度拆分字段。 就是不知道一张表里 json 类型的字段太多会不会有什么性能上的问题
    imherer
        10
    imherer  
    OP
       2018-10-31 09:29:47 +08:00
    @n2ex2 那你倒是说说部分更新怎么实现啊?
    注意是更新入库,不是在 RAM 里的操作
    reus
        12
    reus  
       2018-11-19 17:14:33 +08:00
    pg 更新一行,是一整行创建一个 tuple 的,所以没有必要分开。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1170 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:40 · PVG 02:40 · LAX 10:40 · JFK 13:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.