我有具有某种唯一约束的 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