diff --git a/docs/linux/postgresql-backup-restore.md b/docs/linux/postgresql-backup-restore.md new file mode 100644 index 0000000..15abbd3 --- /dev/null +++ b/docs/linux/postgresql-backup-restore.md @@ -0,0 +1,66 @@ +# Postgresql Backup and Restore in Docker + +## Make pg backup + +```shell +docker exec -e PGPASSWORD='' \ + pg_dump -U -d -Fc -f /tmp/database.dump +``` + +## Copy backup to root + +```shell +docker cp :/tmp/database.dump /root/database.dump +``` + +## Stop and remove old container + +```shell +docker stop +docker rm +``` + +## Remove old database files + +```shell +rm -rf /mnt// +mkdir /mnt// +chown 999 /mnt// +chmod 700 /mnt// +``` + +## Start new container +```shell +docker run \ + --name \ + --detach \ + --restart unless-stopped \ + --network \ + --volume /mnt/:/var/lib/postgresql/data \ + --env POSTGRES_DB= \ + --env POSTGRES_USER= \ + --env POSTGRES_PASSWORD= + docker.io/library/postgres:17 +``` + +## Copy backup to new container + +```shell +docker cp /root/database.dump :/tmp/database.dump +``` + +## Verify role and db + +```shell +docker exec -e PGPASSWORD='' \ + psql -U -c "CREATE ROLE WITH LOGIN PASSWORD '';" +docker exec -e PGPASSWORD='' \ + psql -U -c "CREATE DATABASE OWNER ;" +``` + +## Restore backup + +```shell +docker exec -e PGPASSWORD='' \ + pg_restore -U -d -Fc /tmp/database.dump +```