我希望将 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
命令。