[英]Mass update individual records in Rails (PostgreSQL)
我偶然發現了更新一組記錄的問題。
在數據庫中,我有
id | name | info::hstore | friends[]::varchar
1 | Claire | {} | []
2 | Mary | {} | []
3 | Bob | {} | []
我有一個哈希數組示例:
[
{id: 1, name: "Claire", info: {age: 21, sex: 'f'}, friends: ['Mary', 'Bob']},
{id: 2, name: "Mary", info: {age: 16, sex: 'f'}, friends: ['Mike']},
{id: 3, name: "Bob", info: {age: 28, sex: 'm'}, friends: ['James']}
]
所有記錄都已經存在於數據庫中,我只想使用哈希表中的列來更新存在的表項,這些哈希表都具有相同數量的要更新的字段:名稱,信息和好友。
有一個gem active-record-import,但它只插入。 另外,方法#update_all無效,因為我有單獨的數據根據ID更新每個記錄。 不想進行原始SQL插入,因為我的行具有Postgres hstore和數組類型,也不想進行大量數據操作。
可能有大約10,000-100,000條記錄要更新。
Env:Postgres 9.4,Rails 3(如果在Rails4中有一個好的解決方案,不勝感激)
因此,我不確定您到目前為止是否反對這種方法,但是可以這樣做:
update_info = [{id: 1, name: "Claire", info: {age: 21, sex: 'f'}, friends: ['Mary', 'Bob']},
{id: 2, name: "Mary", info: {age: 16, sex: 'f'}, friends: ['Mike']},
{id: 3, name: "Bob", info: {age: 28, sex: 'm'}, friends: ['James']}
]
update_info.each do |row|
user = User.find(row[:id])
user.update(info: row[:info], friends: row[:friends])
end
這是將您的信息從哈希數組中獲取到數據庫的唯一方法。 使用Postgres,您可以使用與聯接類似的方法從另一個表進行批量更新。 但是,如果您要解決所有這些麻煩,那么您應該僅在數據庫控制台psql
或使用允許您執行SQL查詢的GUI DB程序中執行此操作。 在數據庫中,有些事情會做得更好,因為這是設計的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.