【问题标题】:Postgres how to know what are all the indexes going to be updated on update indexed json fieldPostgres如何知道在更新索引的json字段上要更新的所有索引是什么
【发布时间】:2023-03-16 08:40:01
【问题描述】:

Users表设计如下,

id - integer
workspace_id - integer
data - json
created_at - timestamp
updated_at - timestamp

json字段中存储的数据如下,

{"age": 21, "city": "London", "name": "ABC", "test_filed1": "text"}

我创建了如下索引

CREATE INDEX concurrently index_user_name ON users using gist(workspace_id, (data ->> 'name') gist_trgm_ops)

同样,我很少有用于优化查询的索引。我想知道如果我更新了 json 中没有被索引的任何一个字段,它会更新 postgres 中的索引,因为字段是同一 json 列的一部分吗?例如age 字段没有被索引,当我单独更新age 时它会更新index_user_name 索引吗?有什么方法可以单独运行更新查询,并且可以选择知道要更新哪些索引?

【问题讨论】:

    标签: sql json postgresql


    【解决方案1】:

    索引将得到维护。当从列派生的值没有改变时,即使列值本身发生了变化,也没有优化来抑制维护。几年前有an attempt加了这样的优化,但是没有成功。

    所以它不会经过 HOT 更新,不仅会维护该索引,还会维护表上的所有其他索引。

    我不知道有什么好的方法可以在不知道或深入研究内部的情况下发现这个事实(例如使用 pg_waldump 或使用 pageinspect)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 2016-08-05
      • 2013-08-06
      • 2019-01-27
      • 2020-03-07
      • 2013-08-03
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多