我在PostgreSQL表中有一个jsonb字段,我只想更改键名,并保持相同的值。
当前,我正在Rails中执行以下操作:
Event.each do |event|
event.metadata['new_key'] = metadata['old_key']
event.metadata.delete('old_key')
event.save
end
是否有一种方法可以使用单个update_all查询获得相同的结果?
答案 0 :(得分:2)
假设使用顶级密钥和最新的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