



After some poking around the PG forums, I eventually worked out this script, which I now run on startup.









#!/usr/bin/env bash

service postgresql stop

mount -t tmpfs -o size=500m tmpfs /mnt/pg_data_mem/

cp -R /var/lib/postgresql/8.4/main/ /mnt/pg_data_mem/

mount --bind /var/lib/postgresql/8.4/main/pg_xlog /mnt/pg_data_mem/main/pg_xlog

chown -R postgres:postgres /mnt/pg_data_mem/

sudo -u postgres /usr/lib/postgresql/8.4/bin/pg_resetxlog -f /mnt/pg_data_mem/main/service postgresql start



I also set data_directory = '/mnt/pg_data_mem/main' in postgresql.conf.



This works in development, where I don't need my DB to persist between reboots. If I did want to keep it around, I could just copy from /mnt/pg_data_mem/main/ to /var/lib/postgresql/8.4/main/ and keep it on disc. For now, my one-way solution works.

I had a problem with a Django project that took forever to run its unit tests. The test database took an enormous amount of time to run, upwards of ten to fifteen minutes each. I didn't have a lot of ways around this, because I had to use a base Model that pulled in lots of cascading requirements and I couldn't avoid the dozens of applications it needed to build tables for. This was really hindering my ability to develop, as I rely heavily on constantly running tests in my own pathetic attempt at Continuous Integration.