My new project (Relishment) is an opportunity for me to experiment with different technology. In this case I decided to switch to PostgreSQL from the RDMS I am familiar with MySQL.
So after struggling to learn the user management system in PostgreSQL, ”Ident authentication failed” was stumping me for a while, I finally got Django connected to a database. The next step was to run the test suite, and then wait.
And wait I did, what was a two or three second run on MySQL was a fifteen second run on PostgreSQL. Hardly desirable when I can run my tests up to several times a minute when debugging an issue. A quick poke around established it was “CREATE DATABASE” at the beginning of the test run that was eating all time.
Googling around the suggestions were that my shiny new Ubuntu 11.04 install, which uses the ext4 file system, is less than optimal for how PostgreSQL goes about things. It also turned up a solution, turning fsync off, which is dangerous on a live server but for development it doesn’t matter if you lose data in a crash.
The fix works splendidly, speeds at least matching MySQL, if not beating it.
DO NOT DO THIS ON A LIVE SERVER!!
So first you want to edit your PostgreSQL file:
sudo vi /etc/postgresql/8.4/main/postgresql.conf
Find this line:
#fsync = on
And change it to this:
fsync = off
Save and close the config file and restart PostgreSQL:
sudo service postgresql restart
And you should get a nice speed improvement when running your test cases.