У меня есть таблица postgresql, которая имеет какое-то уникальное ограничение.
У меня есть скрипт ruby, который обновит эту таблицу.Сценарий ruby должен иметь возможность переключаться на UPDATE вместо INSERT, когда произошла ошибка такого типа:
PGError: ERROR: duplicate key value violates unique constraint
CMIIW, сиквел, похоже, не может перехватить это исключение ??
В любом случае,Пример кода ниже - это то, что я хотел бы видеть работающим, но, очевидно, нет:
@myarray.each do |x|
fresh_ds = DB["INSERT INTO mytable (id, col_foo) values ('#{x}' ,'#{myhash[x]}')"]
result = fresh_ds.insert
catch Sequel::Error do
fresh_ds = DB["UPDATE mytable set col_foo = '#{myhash[x]} where id = #{x}"]
result = fresh_ds.update
end
end
Возможно, мой код ruby неверен или я пропустил что-то, чего не знаю.
Любое решение?
Спасибо.
ОБНОВЛЕНИЕ: код ниже работает, ошибка обнаруживается при нарушении уникального ограничения.
@myarray.each do |x|
begin
# INSERT CODE
rescue Sequel::Error
# UPDATE CODE
end
end