我正在尝试使用 activerecord-import 导入数据,但遇到了问题。如果该行已经存在,则需要对其进行更新,否则需要创建该行。表中的唯一行由两列的组合定义,其中每个列的值在表中可能不是唯一的。由于列不是唯一列,我将如何使用 on_duplicate_key_update 的冲突目标。
现在了解详情。我有一个名为 Order 的模型,下面是 Order 模型中列的简化版本。
id
order_number
sku_number
quantity
数据库中的唯一行由 order_number 和 sku_number 的组合标识。id 列是自动递增的。通常,如果我有一个唯一列作为标识符,我可以执行以下操作。因此,在下面的示例中,假设 id 列是唯一标识符,我将使用 id 列作为冲突目标。
order = Order.create(order_number: '1', sku_number: '1', quantity: 100)
order.quantity = 200
Order.import [order], on_duplicate_key_update: {conflict_target: [:id], columns: [:quantity]}
这将更新数量,因为订单已经存在。
但我需要的是类似
Order.import [order], on_duplicate_key_update: {conflict_target: [:order_number, :sku_number], columns: [:quantity]}
order_number 和 sku_number 将唯一标识冲突行。
但这失败了,因为 Postgres 期望冲突目标的唯一列。
有没有办法使用非唯一列(即 order_number 和 sku_number)调用 on_duplicate_key_update?
任何帮助将不胜感激。