i use templates to create a "quick save" backup of a database quickly during development:
createdb -T old_db new_db
createdb -T old_db new_db
Like so:
function save_database() {
mkdir -p /tmp/database-snapshots
DATABASE_NAME=$PROJECT_NAME
pg_dump -Fc "$DATABASE_NAME" >"/tmp/database-snapshots/$DATABASE_NAME.dump"
}
function restore_database() {
DATABASE_NAME=$PROJECT_NAME
DATABASE_DUMP="/tmp/database-snapshots/$DATABASE_NAME.dump"
if [ ! -f "$DATABASE_DUMP" ]; then
echo "No dump to restore"
return
else
psql postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid()'
psql postgres -c "DROP DATABASE IF EXISTS \"$DATABASE_NAME\""
psql postgres -c "CREATE DATABASE \"$DATABASE_NAME\""
pg_restore -Fc -j 8 -d "$DATABASE_NAME" "$DATABASE_DUMP"
fi
}Stellar is a tool that wraps the template mechanism, and has some benchmarks: https://github.com/fastmonkeys/stellar