我在 Rails 中有一个 Join 表,它只是一个带有 id 的 2 列表。
为了批量插入此表,我使用
ActiveRecord::Base.connection.execute("INSERT INTO myjointable (first_id,second_id) VALUES #{values})
不幸的是,当有重复时,这会给我带来错误。我不需要更新任何值,insert
如果存在重复值,只需转到下一个值。
我该怎么做?
作为一个fyi,我搜索了stackoverflow,大多数答案对我来说有点高级理解。我还检查了 postgresql 文档并在 Rails 控制台中玩过,但仍然无济于事。我无法弄清楚这一点,所以我希望其他人可以帮助告诉我我做错了什么。
我试过的最接近的说法是:
INSERT INTO myjointable (first_id,second_id) SELECT 1,2
WHERE NOT EXISTS (
SELECT first_id FROM myjointable
WHERE first_id = 1 AND second_id IN (...))
该语句的部分问题是我一次只插入 1 个值,而我想要一个批量插入的语句。此外second_id IN (...)
,该语句的部分可以包含多达 100 个不同的值,所以我不确定这会有多慢。
请注意,在大多数情况下,不应该有很多重复项,所以我不确定批量插入临时表并找到不同的值是否是个好主意。
编辑以添加上下文:
我需要批量插入的原因是因为我在 2 个模型之间存在多对多关系,其中 1 个模型永远不会被表单填充。我有股票和股票价格历史。股票价格历史从未以某种形式创建,而是通过使用雅虎金融 API 从 YahooFinance 提取数据来大量插入。我使用 activerecord-import gem 批量插入股票价格历史记录(即 Model.import 列、值),但我无法输入 Jointable.import 列、值,因为我得到了jointable is an undefined local variable