postgresql 更新JSON列中的单个属性会触发整个列更新

kqqjbcuj  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(113)

我想知道这是一个bug还是正常的rails行为。
我在PostgreSQL数据库中有一个JSON类型列,看起来像这样

id | name | address(json)
1  | josh | { line1: nil, line2: nil, city: nil }

字符串
如果我这样做:

@account = Account.find(1)
@account.address['city'] = "new york"
@account.save


这通过重写整个json和每个属性来更新整个列。我想这可能会在某些用例中引入竞争条件,而不仅仅是更新地址。

UPDATE "accounts" SET "address" = $1, "updated_at" = $2 WHERE "accounts"."id" = $3  [["address", "{'is_foreign':false,'line1':'54 Lemon Ave",'line2':null,'city':'new york','state':'NY','country':'US'}"], ["updated_at", "2019-11-15 18:09:07.698093"], ["id", 2]]

axr492tv

axr492tv1#

这看起来像是一个正常的行为,试试这个:

@account = Account.find(1)
address_json = @account.address
address_json['city'] = 'new york'
@account.address = address_json
@account.save

字符串
希望有帮助!
更多有用的信息在这里:

相关问题