Я изменил свой подход к задаче после советов других людей. Я вставляю INTO только сгруппированные данные вместо INSERT INTO в каждую строку.
Примерно так:
СОЗДАНИЕ ИЛИ ЗАМЕНА ПРОЦЕДУРЫ XTS.GET_PROFILE_AGGR
AS
CURSOR time_series_cur IS выбирает отличное имя_кластера_таблицы как res из xts.time_serie;
BEGIN
for time_series_rec in time_series_cur
LOOP
Execute immediate 'INSERT INTO HDO.tmp_profiles_overview (id_profile, cnt, d_min, d_max) select time_series_id, count(*), min(time), max(time) from ' || time_series_rec.res || ' group by time_series_id';
END LOOP;
commit;
END;
validates_uniqueness_of :name, :case_sensitive => false
добивается цели, но необходимо иметь в виду это validates_uniqueness_of
не гарантирует уникальности, если у Вас будет несколько серверов/серверных процессов (например, выполняющий Пассажира Phusion, несколько Полукровок, и т.д.) или многопоточный сервер. Поэтому Вы могли бы получить эту последовательность событий (порядок важен):
insert
оператор для новой записи и успешно выполняетсяinsert
оператор для новой записи и сбоя за ужасным исключением сервера, которое возвращается из адаптера SQL. Если у Вас не будет ограничения базы данных, то вставка успешно выполнится, и у Вас теперь есть две строки с 'нечто' как имя.См. также "Параллелизм и целостность" в validates_uniqueness_of
Документация направляющих.
... несмотря на его имя, validates_uniqueness_of действительно не гарантирует, что значения столбцов будут уникальны. Все, что это может сделать, проверяют, что никакой столбец не имеет то же значение как это в записи, проверяемой в то время, когда проверка выполняется. Для двух записей возможно быть созданным одновременно, каждый с тем же значением для столбца, который должен быть уникальным, и для обеих записей для передачи проверки. Самый надежный способ осуществить уникальность с ограничением уровня базы данных."
См. также опыт этого программиста с validates_uniqueness_of
.
Одним путем это обычно происходит, случайные двойные представления от веб-страницы при создании новой учетной записи. Это - твердое для решения, потому что то, что возвратит пользователь, является второй (ужасной) ошибкой, и она заставит их думать своя отказавшая регистрация, когда в действительности она успешно выполнилась. Лучшим способом я нашел для предотвращения, это должно только использовать JavaScript, чтобы попытаться предотвратить двойное представление.
Существует опция, где можно указать нечувствительность к регистру
validates_uniqueness_of :name, :case_sensitive => false