Edgewall Software

Version 48 (modified by Jun Omae, 7 years ago) ( diff )

Added parameters for SQLite database backend (#11967)

Database Backend

Trac offers an easily extensible layer for database support, see trac.db.api. The following databases have been integrated in this layer:

There is work in progress for the following databases:

Database Installation Instructions


Installed out-of-the-box, provided you have installed the PySqlite bindings.

The following parameters are supported:

  • extensions: Load the extensions, see also TracIni.
  • timeout: Set timeout to connect the database, 10.0 is used by default.
  • cursor: eager cursor pre-fetching all the rows is used by default. It can be turned off by specifying cursor= (#3446).
  • journal_mode: Set the journal mode to the database.
  • synchronous: Set the synchronous flag.

Known issues: see pysqlite-related tickets.



  • Have a working copy of Postgresql.
  • Get the proper database driver for Python, see above.
  • Create a database for your Trac environment:
    % createdb dbname
  • Run trac-admin to create a new Trac environment. When prompted for a Database connection string, use:

Notice that the port number might be different in your Postgresql installation, eg 5433. See postgresql.conf.

Alternatively on UNIX, if the database is a local one, you can use UNIX sockets instead of TCP/IP:


If you are using user Trac without a password to connect through UNIX sockets to database trac and have only one project (hence no need for different schemas), your connections string would be postgres://trac:@/trac

  • Note: '?host=…' is optional. Check your postgresql.conf' unix_socket_directory option if you have connection problems.

See #4546 for more details.

See also #2441, which discusses the process of migration from SQLite to Postgresql.

For a Postgresql recipe tested on CentOS4 (Red Hat -EL4) see PostgresqlRecipe.

Note: Since Trac 0.10 the psycopg1 Postgresql driver is no longer supported due to lack of Unicode support.

Known issues: see postgres-related tickets


MySQL is supported by Trac since 0.10, but there are some caveats, documented in more details in the MySqlDb page.

  • Run trac-admin to create a new Trac environment. When prompted for a database connection string, use:
  • or when you need more options:

The following parameters are supported since Trac 1.0:

  • compress: Enable compression (0 or 1)
  • init_command: Command to run once the connection is created
  • named_pipe: Use a named pipe to connect on Windows (0 or 1)
  • read_default_file: Read default client values from the given file (also used for SSL configuration)
  • read_default_group: Configuration group to use from the default file
  • unix_socket: Use a Unix socket at the given path to connect

Known issues: see mysql-related tickets.

Users have reported success in converting their database from SQLite to MySQL.

Alternative Ideas for Database Independence

Object-Relational Mapper

An ORM could be used to provide a unified object interface to different RDBMS:

  • Modeling, which is another, more advanced OR-Mapper.
  • ADODB, the fast database abstraction layer with a version available for Python.
  • SQLAlchemy is also quite advanced.
  • some people have been talking about using SQLObject to accomplish this goal of database independence.

Store Tickets and Wiki pages directly in the Subversion repository

A compelling idea with many advantages. A page advocating this plan is TighterSubversionIntegration. There has also been a discussion on the Trac mailing list, of which the arguments are summarized on the page WhySQLite.

See also: SqlAlchemy

Note: See TracWiki for help on using the wiki.