我正在使用
pg_admin
备份我的 postgres 数据库 docker-compose
sudo docker-compose exec -T postgres sh -c 'pg_dump -cU postgres postgres' | gzip > ../backups/db_backup-$(date +%Y-%m-%d_%H-%M-%S).sql.gz
但是它创建了一个
zero-bytes
gz 文件,当尝试解压缩它时,它是一个空文件。
该文件夹具有所有必要的权限,因为如果不压缩,数据库将转储为 .sql 文件。
我该如何解决? 谢谢
您可以尝试一些方法来解决这个问题:
pg_dump
命令是否生成任何输出。您可以通过在容器中运行 pg_dump -cU postgres postgres
命令并查看它是否产生任何输出来执行此操作。如果它没有产生任何输出,那么问题出在 pg_dump
命令本身。pg_dumpall
命令代替 pg_dump
。 pg_dumpall
命令转储 PostgreSQL 集群中的所有数据库,而 pg_dump
只转储一个数据库。您可以使用以下命令备份所有数据库:sudo docker-compose exec -T postgres sh -c 'pg_dumpall -cU postgres' | gzip > ../backups/db_backup-$(date +%Y-%m-%d_%H-%M-%S).sql.gz
pg_dump
的输出重定向到一个文件,而不是将其通过管道传输到 gzip
。这将帮助您确定问题是出在 pg_dump
还是 gzip
。sudo docker-compose exec -T postgres sh -c 'pg_dump -cU postgres postgres' > ../backups/db_backup-$(date +%Y-%m-%d_%H-%M-%S).sql
如果这生成了一个非空文件,那么问题出在
gzip
。 4.尝试在没有gzip
选项的情况下运行-T
。 -T
的docker-compose exec
选项设置TTY模式,这可能会干扰gzip
.
sudo docker-compose exec postgres sh -c 'pg_dump -cU postgres postgres' | gzip > ../backups/db_backup-$(date +%Y-%m-%d_%H-%M-%S).sql.gz
如果这生成了一个非空文件,那么问题出在
-T
选项上。