ある種の一意の制約があるpostgresqlテーブルがあります。
このテーブルを更新するrubyスクリプトがあります。この種のエラーが発生した場合、rubyスクリプトはINSERTではなくUPDATEに切り替えることができるはずです。
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
たぶん私のルビーコードが間違っているか、私が知らない何かを逃しました。
解決策はありますか?
ありがとう。
更新: 以下のコードは機能します。一意の制約に違反するとエラーがキャッチされます。
@myarray.each do |x|
begin
# INSERT CODE
rescue Sequel::Error
# UPDATE CODE
end
end