Backup/Restore a dockerized PostgreSQL database Backup/Restore a dockerized PostgreSQL database docker docker

Backup/Restore a dockerized PostgreSQL database


Backup your databases

docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

Restore your databases

cat your_dump.sql | docker exec -i your-db-container psql -U postgres


I think you can also use a postgres backup container which would backup your databases within a given time duration.

  pgbackups:    container_name: Backup    image: prodrigestivill/postgres-backup-local    restart: always    volumes:      - ./backup:/backups    links:      - db:db    depends_on:      - db    environment:      - POSTGRES_HOST=db      - POSTGRES_DB=${DB_NAME}       - POSTGRES_USER=${DB_USER}      - POSTGRES_PASSWORD=${DB_PASSWORD}      - POSTGRES_EXTRA_OPTS=-Z9 --schema=public --blobs      - SCHEDULE=@every 0h30m00s      - BACKUP_KEEP_DAYS=7      - BACKUP_KEEP_WEEKS=4      - BACKUP_KEEP_MONTHS=6      - HEALTHCHECK_PORT=81


Backup Database

generate sql:

  • docker exec -t your-db-container pg_dumpall -c -U your-db-user > dump_$(date +%Y-%m-%d_%H_%M_%S).sql

to reduce the size of the sql you can generate a compress:

  • docker exec -t your-db-container pg_dumpall -c -U your-db-user | gzip > ./dump_$(date +"%Y-%m-%d_%H_%M_%S").gz

Restore Database

  • cat your_dump.sql | docker exec -i your-db-container psql -U your-db-user -d your-db-name

to restore a compressed sql:

  • gunzip < your_dump.sql.gz | docker exec -i your-db-container psql -U your-db-user -d your-db-name

PD: this is a compilation of what worked for me, and what I got from here and elsewhere. I am beginning to make contributions, any feedback will be appreciated.