【问题标题】:PostgreSQL JSONB - Update key name on all rows with a single queryPostgreSQL JSONB - 使用单个查询更新所有行的键名
【发布时间】:2019-09-08 01:30:32
【问题描述】:

我在 PostgreSQL 表中有一个 jsonb 字段,我只想更改键名,并为其保持相同的值。

目前,我在 Rails 中这样做:

Event.each do |event|
   event.metadata['new_key'] = metadata['old_key']
   event.metadata.delete('old_key')
   event.save
end

有没有办法使用单个 update_all 查询来实现相同的结果?

【问题讨论】:

  • 顶级密钥?样本值? Postgres 版本?

标签: ruby-on-rails postgresql activerecord jsonb


【解决方案1】:

假设一个顶级键和当前 PostgreSQL,
您可以通过删除旧键并添加新键来实现这一点 - 使用从旧键复制的值:

UPDATE event
SET    metadata = (metadata - 'old_key')
               || jsonb_build_object('new_key', metadata->'old_key')
WHERE  metadata ? 'old_key';  -- only where the key exists

db小提琴here

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2015-10-15
    • 2021-07-27
    • 2021-12-07
    • 2021-02-13
    • 2016-03-05
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多