# Database Migration

The default configuration for Pootle uses SQLite which is not really suited for production use. If you started using SQLite and want to migrate to another database system such as MySQL or PostgreSQL without recreating existing data, you can perform a database migration using the steps described on this page.

Note

A database migration is possible since Pootle 2.1.1. It is possible to do the database migration using the version 2.0.6, which was specifically added to allow database migration. This migration will only work with Django 1.2 or later.

## Detailed Migration Process

Note

Pootle 2.1.x and 2.5.x database can be very large. Dumping and loading data will take long and will require lots of RAM. If you have a 2.0 install it is better to migrate the database first and then upgrade to 2.5, since the 2.0 database is relatively small.

The steps to migrate between databases are as follows:

1. Make complete backups of all your files, settings and databases.

2. Ensure that you have:

   1. At least Pootle 2.0.* or Pootle 2.1.*.
   2. At least Django 1.2.0.

3. Don’t change the version of Pootle at any stage during this process.

4. Read about how to run management commands.

5. Stop the Pootle server to avoid data changing while you migrate.

6. Leave current settings intact.

7. Dump the data to a JSON file using the dumpdata command. Note the `-n` option.

       $ pootle dumpdata -n > data.json

8. Create a new database for Pootle.

9. Change your settings to point at this new database.

10. Initialize the new database using the syncdb command.

    Note

    Sometimes not removing records introduced by syncdb can create problems. So if you experience any failure during loaddata execution that can’t be solved by any other mean, then remove all the records from the new database while keeping the tables intact.

11. Load the data from the JSON file in the new database using the loaddata command:

        $ pootle loaddata ./data.json

    Note

    If you experience any problem during loaddata execution, you may find it helps to instead export the data with:

        $ pootle dumpdata > data.json

    avoiding the use of `-n` or `--natural` options.

12. Restart the server; you should be running under the new database now.

Note

Some other problems reported during database migration may be solved by commenting all signal calls in Pootle code during the database migration process. If you do so, remember to uncomment them after the migration.