Desde la versión 9.3, postgreSQL permite hacer dumps de la base de datos en forma paralela, aprovechando así el número de cores de la máquina.
En una forma rápida, podemos lanzar este proceso:
pg_dump -h $MAQUINA -U $USER -d $DATABASE -Fd -j `nproc` -f $DESTINO
Las variables son autorreferentes, con lo que la gracia de este comando se encuentra en la opción -Fd (obligatoria para que use diferentes cores), que realiza el dump en un directorio en lugar de un archivo; y la opción -j, que refiere al número de procesos que se lanzan simultáneamente. En este caso, hacemos uso de lo que devuelve nproc
para levantar tantos procesos como núcleos.
Un pequeño script de backup de base de datos local (perfecto para meter en un cronjob del usuario postgres) sería:
#!/bin/bash
## This script will create a backup for each database listed in the DATABASES variable
## Use as postgres user or add the -U [username] to the pg_dump line
DATABASES="template1 db other_db"
CORES=`nproc`
TARGET_FOLDER=/var/backups
for DATABASE in $DATABASES; do
mkdir -p $TARGET_FOLDER/$DATABASE
pg_dump -d $DATABASE -Fd -j $CORES -f $TARGET_FOLDER/$DATABASE
done