У меня есть таблица Join в Rails, которая представляет собой всего лишь таблицу из 2 столбцов с идентификаторами.2 столбец столбца, игнорировать дубликаты на массовой вставке postgresql
Для массовой вставки в эту таблицу, я использую
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 моделями, где одна из моделей никогда не заселенных форме. У меня есть акции и история цен на акции. Истории цен на акции никогда не создаются в форме, а скорее вставляются сами, вытаскивая данные из YahooFinance с их API финансов Yahoo. Я использую атрибут activerecord-import для массового ввода для истории цен на акции (например, столбцы Model.import, значения), но я не могу набирать столбцы conable.import, значения, потому что я получаю
Непонятно, какие проблемы вы пытаетесь решить. Например, зачем вам нужна массовая вставка с использованием пользовательского SQL? Каков контекст? – muttonlamb
@muttonlamb Я добавил причину, по которой мне нужна массовая вставка с использованием пользовательского SQL –
. В будущем, пожалуйста, всегда указывайте свою версию PostgreSQL и, где возможно, предоставите некоторые примеры данных или SQLFiddle. –