PostgreSQL JSONB - 使用单个查询更新所有行的键名
PostgreSQL JSONB - Update key name on all rows with a single query
我在 PostgreSQL table 中有一个 jsonb 字段,我只想更改键名称,并为其保留相同的值。
目前,我在 Rails 中这样做是这样的:
Event.each do |event|
event.metadata['new_key'] = metadata['old_key']
event.metadata.delete('old_key')
event.save
end
有没有办法使用单个 update_all 查询获得相同的结果?
假设一个顶级键和当前的 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<>fiddle here
我在 PostgreSQL table 中有一个 jsonb 字段,我只想更改键名称,并为其保留相同的值。
目前,我在 Rails 中这样做是这样的:
Event.each do |event|
event.metadata['new_key'] = metadata['old_key']
event.metadata.delete('old_key')
event.save
end
有没有办法使用单个 update_all 查询获得相同的结果?
假设一个顶级键和当前的 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<>fiddle here