Opened 5 years ago

Installation fails with PostgreSQL database backend

Reported by: Owned by: anonymous coling normal WorkLogPlugin normal 0.12

Description

I installed WorkLogPlugin using easy_install, edited my trac.ini to include:

worklog.* = enabled

[worklog]
timingandestimation = true


I then ran:

trac-admin /var/trac upgrade


And it failed with:

Worklog needs an upgrade
Creating work_log table
InternalError: current transaction is aborted, commands ignored until end of transaction block


I examined the code in api.py and traced the problem to the following section:

    def do_db_upgrade(self, db):
# Legacy support hack (supports upgrades from revisions r2495 or before)
if self.db_installed_version == 0:
try:
cursor.execute('SELECT * FROM work_log LIMIT 1')
# We've succeeded so we actually have version 1
self.db_installed_version = 1
except:
self.db_installed_version = 0


What I believe is happening is the SELECT command fails with an error. In PostgreSQL, this invalidates the transaction until a rollback is performed. There is no rollback in the code, so when the function later tries to create a table, the InternalError is generated.

I was able to work around the problem by commenting out the SELECT test and simply setting db_installed_version to zero (which works because this is a fresh install), but I don't know the whole installation workflow well enough to suggest a permanent fix. My guess is that rolling back the transaction is bad because it might undo changes done by other plugins installed at the same time. I think that you probably need to use an alternate method of determining if the table exists or not.