Opened 3 years ago

Last modified 11 days ago

#11669 new defect

MySQL to PostgreSQL migration fails with worklog usermanual

Reported by: Quince Owned by:
Priority: high Component: WorkLogPlugin
Severity: major Keywords:
Cc: rjollos Trac Release: 1.0


This is a great plugin that we use to slave-drive oversee our devs. Unfortunately, it seems it can't be migrated with the TracMigratePlugin:

./ --in-place /srv/trac postgres://tracuser:nalkyergatte@

Worklog needs an upgrade
 * Upgrading Database
Creating work_log table
Updating work_log table (v2)
Updating work_log table (v3)
 * Upgrading usermanual
Traceback (most recent call last):
  File "./", line 55, in <module>
    sys.exit(main(sys.argv[1:]) or 0)
  File "./", line 51, in main
    return TracMigrationCommand(env)._do_migrate(dest, dburi)
  File "/tmp/m/tracmigrate/", line 29, in _do_migrate
    return self._do_migrate_inplace(dburi)
  File "/tmp/m/tracmigrate/", line 60, in _do_migrate_inplace
    env = self._create_env(env_path, dburi)
  File "/tmp/m/tracmigrate/", line 92, in _create_env
    env = Environment(env_path, create=True, options=options)
  File "/usr/lib/python2.7/site-packages/trac/", line 124, in __call__
    self.__init__(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/trac/", line 288, in __init__
  File "build/bdist.linux-x86_64/egg/worklog/", line 55, in environment_created
  File "build/bdist.linux-x86_64/egg/worklog/", line 182, in upgrade_environment
  File "build/bdist.linux-x86_64/egg/worklog/", line 146, in do_user_man_update
AttributeError: 'NoneType' object has no attribute 'cursor'

Attachments (0)

Change History (7)

comment:1 follow-up: Changed 3 years ago by jun66j5

I've improved TracMigratePlugin in [13808]. Please try the latest of TracMigratePlugin. I think the migration currently is robust.

I consider that most of plugins which use IEnvironmentSetupParticipant have not been tested on initenv....

Also, proposed changes for the original issue.

  • worklogplugin/trunk/worklog/

    5252    def environment_created(self):
    5353        """Called when a new Trac environment is created."""
    54         if self.environment_needs_upgrade(None):
    55             self.upgrade_environment(None)
     54        @self.env.with_transaction()
     55        def tx(db):
     56            self.upgrade_environment(db)
    5758    def system_needs_upgrade(self):
    5859        return self.db_installed_version < self.db_version

After the changes

$ cat inherit.ini
worklog = enabled
$ PYTHONPATH=. ~/venv/trac/0.12.5/bin/trac-admin /dev/shm/th11670 initenv --inherit=$PWD/inherit.ini th11670 sqlite:db/trac.db > /dev/null
$ echo $?
$ sqlite3 /dev/shm/th11670/db/trac.db '.schema work_log'
CREATE TABLE work_log (worker     TEXT,ticket     INTEGER,lastchange INTEGER,starttime  INTEGER,endtime    INTEGER, comment TEXT);

comment:2 Changed 3 years ago by anonymous

Hi jun66j5

I made this change in and got the updated TracMigratePlugin. I got no errors when I ran the migrate command from trac-admin, but then, when I go to the Work Log tab in trac, I see this:

Trac detected an internal error:

ProgrammingError: relation "work_log" does not exist
LINE 1: ...(SELECT worker,MAX(lastchange) AS lastchange FROM work_log G...

The migration seems to not have copied the work_log table even though the plugin is enabled in trac.ini. I'm guessing I need to execute the "After the changes" commands you listed above, but my current database is MySQL, not SQLite, and I don't know how to change the commands to MySQL format.

comment:3 Changed 3 years ago by Quince

It seems to work after I reverted the changes to

comment:4 Changed 3 years ago by jun66j5

Hmm, worklogplugin with the patch and the latest of tracmigrateplugin work for me.

$ grep database /dev/shm/th11670-test/conf/trac.ini
database = mysql://tracuser:password@localhost/trac_worklog
$ ~/venv/trac/1.0.1/bin/python --in-place /dev/shm/th11670-test postgres://tracuser:password@localhost/tractest?schema=worklog
Worklog needs an upgrade
 * Upgrading Database
Creating work_log table
Updating work_log table (v2)
Updating work_log table (v3)
 * Upgrading usermanual
Done upgrading Worklog
Copying tables:
  attachment table... 0 records.
  auth_cookie table... 0 records.
  cache table... 1 records.
  component table... 2 records.
  enum table... 13 records.
  milestone table... 4 records.
  node_change table... 0 records.
  permission table... 16 records.
  report table... 8 records.
  repository table... 0 records.
  revision table... 0 records.
  session table... 0 records.
  session_attribute table... 0 records.
  system table... 3 records.
  ticket table... 0 records.
  ticket_change table... 0 records.
  ticket_custom table... 0 records.
  version table... 2 records.
  wiki table... 59 records.
  work_log table... 0 records.
Back up conf/trac.ini to conf/trac.ini.migrate-1396581184 in /dev/shm/th11670-test.
$ sudo -u postgres psql
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \c tractest
You are now connected to database "tractest".
tractest=# set search_path = worklog,public;
tractest=# \d
                 List of relations
 Schema  |       Name        |   Type   |  Owner
 worklog | attachment        | table    | tracuser
 worklog | auth_cookie       | table    | tracuser
 worklog | wiki              | table    | tracuser
 worklog | work_log          | table    | tracuser
(22 rows)

comment:5 in reply to: ↑ 1 Changed 3 years ago by rjollos

Replying to jun66j5:

Also, proposed changes for the original issue.

Feel free to push any changes for the WorkLogPlugin. coling has previously given me the go-ahead to push any contributions.

comment:6 Changed 3 years ago by jun66j5

In 13835:

WorkLogPlugin: fixed environment_created() not working on initenv (refs #11669)

comment:7 Changed 11 days ago by rjollos

  • Owner coling deleted

Add Comment

Modify Ticket

as new The ticket will remain with no owner.

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.