我正在尝试使用activerecord-import来导入数据,但遇到了问题。如果行已经存在,则需要更新该行,否则需要创建新行。表中唯一的行由两列的组合定义,其中每个列的值在表中可能不是唯一的。如何使用on_duplicate_key_update的conflict_target,因为这些列不是唯一的列。
现在让我们来看细节。我有一个名为Order的模型,在Order模型中,以下是列的简化版本。
现在让我们来看细节。我有一个名为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]}
订单号和sku编号将唯一标识冲突行。
但是这会失败,因为Postgres期望有一个唯一的列作为冲突目标。
是否有办法使用非唯一列(例如订单号和sku编号)调用on_duplicate_key_update?
非常感谢任何帮助。