Modify

Opened 4 years ago

Closed 23 months ago

#7441 closed defect (wontfix)

sqlite2pg dies with an SQL error

Reported by: jkugler Owned by: pacopablo
Priority: high Component: SqliteToPgScript
Severity: blocker Keywords:
Cc: Trac Release: 0.11

Description

When trying to run sqlite2pg like so:

./sqlite2pg -e /path/to/trac -p postgres://trac:password@localhost/trac

I'm getting this error:

Traceback (most recent call last):
  File "./sqlite2pg", line 335, in <module>
    sys.exit(main(sys.argv[1:]))
  File "./sqlite2pg", line 331, in main
    Main(opts)
  File "./sqlite2pg", line 250, in Main
    rc = tmigration.migrateTable(tname) or rc
  File "./sqlite2pg", line 72, in migrateTable
    rc = self.default_copy(table)
  File "./sqlite2pg", line 93, in default_copy
    pgcur.execute(insert_into, row)
  File "/usr/lib/python2.6/dist-packages/trac/db/util.py", line 64, in execute
    return self.cursor.execute(sql_escape_percent(sql), args)
  File "/usr/lib/python2.6/dist-packages/trac/db/util.py", line 64, in execute
    return self.cursor.execute(sql_escape_percent(sql), args)
psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block

According to question "I receive the error current transaction is aborted, commands ignored until end of transaction block and can’t do anything else!" at http://initd.org/psycopg/docs/faq.html it does seem be an error in the SQL queries issued by sqlite2pg.

This is with Trac 0.11.7 on Ubuntu 10.04.

Attachments (0)

Change History (2)

comment:1 Changed 4 years ago by jkugler

I found the problem. On line 77, in TableMigration.default_copy(), we have this:

        for row in scur:
            rows += 1
            try:
                pgcur.execute(insert_into, row)
            except (ProgrammingError, IntegrityError):
                row_exists += 1
            continue
        if row_exists:
            print "%s of %s rows already existed in the %s table" % \
                  (str(row_exists), str(rows), table)

So, what sqlite2pg tries to do is silence the error, and then report the duplicate row after the fact. In our case, the Integrity error was more values than columns (rogue plugin added a column to a core table), and thus after that error, it could not continue, thus aborted the transaction. However, even though the transaction was aborted, sqlite2pg continued to try to insert rows, thus the error in the original report.

comment:2 Changed 23 months ago by rjollos

  • Resolution set to wontfix
  • Status changed from new to closed

This plugin is deprecated. See the TracMigratePlugin.

Add Comment

Modify Ticket

Action
as closed .
The resolution will be deleted. Next status will be 'reopened'.
Author


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

 
Note: See TracTickets for help on using tickets.