- SQLite, using PySqlite, the default database
- PostgreSQL, using the
psycopg2 bindings, support added as of Trac 0.9.
Note that psycopg1 is not supported anymore and that pyPgSQL also present issues for some users, see #5096).
Finally, see #126 for historical notes.
- MySQL, using MySqlDb, support added for Trac 0.10; see status report and #986 for historical notes.
There's work in progress for the following databases:
Backend Specific Installation Instructions
Installed out-of-the-box, provided you have installed the PySqlite bindings.
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
- 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
An ORM could be used to provide a unified object interface to different RDBMS:
- some people have been talking about using SQLObject to accomplish this goal of database independence.
- Modeling, which is another, more advanced OR-Mapper.
- SQLAlchemy is also quite advanced.
Comparisons between both and more info on Python ORMs:
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.