[英]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.