I recently switched from MySQL to PostgreSQL.
It would appear that every time I save an ActiveRecord object rails
begins a database transaction before saving it, then commits after
inserting the data into the table. The problem with that is that I am
getting an this uninformative error:
ActiveRecord::StatementInvalid: PGError: ERROR: current transaction
is aborted, commands ignored until end of transaction block
: INSERT INTO pictures (…
Which tells me nothing about why the INSERT actually failed.
Apparently other people have ran into this as well:
I’d like to either disable transactions (at least for the sake of
functional tests) or still be able to retrieve my error somehow. Any
advice on either would be much appreciated.
Which PGSQL adapter are you using? I use Postgres with Rails also, and
while it does wrap everything in a transaction I don’t get the error
your getting. Personally I wouldn’t be turning transactions off, and
the error is there for a reason.
Make sure your using the postgres-pr (0.4.0) gem.
On Jun 19, 9:13 am, “[email protected]” [email protected]
I tried using the other adapters (postgres-pr, ruby-postgres), but the
same thing happens.
I should’ve mentioned that this is happening in my functional tests,
because I just discovered it’s not happening in development mode.
I have use_transactional_fixtures set to false.
Oops, nevermind. I am getting the error in development mode as well.
On Jun 18, 6:13 pm, “[email protected]” [email protected]
I’ve also just found out that the INSERT statement works fine when I
paste it into psql.
On Jun 18, 6:38 pm, “[email protected]” [email protected]
I found out what is causing it. There are exceptions being thrown in
my before_ and after_ callbacks for my model. Can rail re-throw the
exception it catches and display that error rather than the one I’m
On Jun 18, 5:13 pm, “[email protected]” [email protected]