繁体   English   中英

在Rails(PostgreSQL)中批量更新单个记录

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM