Hi,
I’m a bit puzzled with an ActiveRecord::StatementInvalid exception
that’s apparently being thrown twice.
I’m using Rails 2.3.3 and Postgres, and inside the Feed Model I have
something like:
has_many :entries, :dependent => :delete_all
def process_feed
…
process_feed_entries
log saving feed
save! # will fail if an exception is thrown below
end
def process_feed_entries
…
begin
# log saving entry
entry.save! # can fail because of duplicate key values
rescue ActiveRecord::StatementInvalid => e
# log exception caught
# log the error in the db (Log Model)
end
end
DB log:
- Saving entry
BEGIN
PGError: ERROR: duplicate key value … : INSERT INTO “entries” …
ROLLBACK - Exception caught
BEGIN
INSERT INTO “logs” …
COMMIT - Saving feed
BEGIN
UPDATE “feeds” …
PGError: ERROR: duplicate key value … : INSERT INTO “entries”
ROLLBACK
ActiveRecord::StatementInvalid: PGError: ERROR: duplicate key …
Stack trace
The last exception that terminates execution was (or should have been)
caught inside the begin/rescue block. Why is it thrown again when the
feed is saved, if the transaction was rolled back?
Any hints much appreciated!
Thanks,
–
Adriano