繁体   English   中英

在单个查询Postgresql 9.6中插入记录并更新计数

[英]Insert records and update count in single query postgresql 9.6

我有两个表的usersproducts 我在一个查询中插入20,000条记录,但是我又想将users表的products_count属性中的产品计数保存到同一事务中。 同样,如果有任何产品删除给用户,那么它也需要更新计数。

这就是我一次插入20k条记录的方式:

product_ids.each { |product_id| attrs << "('#{product_id}','#{user_id}','#{Time.now.utc}')" }
products_sql = "INSERT INTO products(product_id, user_id, created_at) VALUES #{attrs.join(', ')}"
ActiveRecord::Base.connection.execute(products_sql)

这正在成功发生。 但是,如果可能的话,如何使用相同的查询将计数更新到用户表中?

一种方法是,我只使用Rails更新方法来更新计数。

更新结束后,您可以执行查询以重新计算产品数量。 就像是

update
  users
set
  users.product_count=(select count(products.id) from products where products.user_id=users.id)

我知道您在同一查询中需要它,但是下面可能会完成您正在寻找的东西。 初次插入后使用

product_ids.each { |product_id| attrs << "('#{product_id}',' {user_id}','#{Time.now.utc}')" }
products_sql = "INSERT INTO products(product_id, user_id, created_at) VALUES #{attrs.join(', ')}"
ActiveRecord::Base.connection.execute(products_sql)

product_count = product_ids.size
users_sql = "INSERT INTO users(product_count) VALUES #{product_count}"
ActiveRecord::Base.connection.execute(users_sql)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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