Postgres 备份为纯文本,恢复时删除数据?

Postgres 备份为纯文本,恢复时删除数据?

我希望将 postgres 数据库备份到纯文本文件,然后恢复该备份。以下是我尝试的方法。

sudo -u postgres pg_dump --create mydatabase > backup.sql
sudo -u postgres psql < backup.sql

我希望数据库完全恢复到我备份时的状态。我期望它在 backup.sql 中发出 DROP DATABASE,但这并没有发生。

目前,我的解决方法是编辑 backup.sql 并插入 DROP DATABASE。这真的有必要吗?

答案1

看起来,使用默认设置所能做的最好的事情pg_dump--clean(与 不兼容--create),它不会删除数据库,但会添加命令来单独删除所有正在备份的表和其他对象。如果您加载以这种方式制作的文件,如果有人在备份后添加了新表,则该新表将保留在数据库中。

您可以创建一个包装脚本:

#!/bin/sh
echo "DROP DATABASE $1;"
sudo -u postgres pg_dump --create $1

然后运行mybackupscript.sh mydatabase > backup.sql(或者将sudo命令移出脚本并使用 sudo 运行脚本,您可以选择。)

答案2

您可以在 shell 脚本中使用dropdb命令。

相关内容