版本:postgresql 9.6,macos 10.14
作为postgres
用户,我运行了 pg_restore 命令:
pg_restore -C backup.curated.20190901.0.bup
即根据转储文件中的内容创建数据库。
这似乎工作正常,它在屏幕上闪现了一堆 SQL 命令。
但是...没有创建数据库。
为了真正创建它,我必须更改命令以添加-d
指定数据库。
pg_restore -d postgres -C backup.curated.20190901.0.bup
行为相同,只是这次数据库被恢复。
-C——创建
Create the database before restoring into it. If --clean is also specified, drop and recreate the target database before connecting to it.
When this option is used, the database named with -d is used only to issue the initial DROP DATABASE and CREATE DATABASE commands. All data is restored into the database name that appears in the archive.
基本上,我很好奇-d
如果数据库恢复需要开关的话,为什么没有人抱怨没有开关。
这里做什么pg_restore
?试运行预览?
如果相关的话,我使用的转储命令是:
sudo -u postgres $pgbin/pg_dump -o -Fc $dbname > $dirbackup/$dbname.bup;
答案1
基本上,我很好奇为什么没有人抱怨缺少 -d 开关,如果需要进行数据库恢复的话。
pg_restore 在这里做什么?试运行预览?
它输出脚本而不假定您要用它做什么。当然可以预览,但也可以将其传输到psql
,或将ssh
其传输到 以在您无法直接访问的远程实例上播放,或者只是保存到文件以进行编辑或将其传输到其他地方。
在最新版本的 PostgreSQL(12.0,于 2019 年 10 月 3 日发布)中,估计有太多人像你一样对pg_restore
标准输出感到惊讶默认情况下,因此从该版本开始,我们现在需要指定一个-f -
参数来获取该行为。您提到的第一个调用现在失败,并显示:
pg_restore: error: one of -d/--dbname and -f/--file must be specified
答案2
需要的标志pg_restore
取决于两者:
- 开始恢复之前数据库/服务器的当前状态
- 用于创建单个数据库备份的标志
gd_dump
- 用于创建完整服务器备份的标志
pg_dumpall
最后一个是pg_restore -C
不需要具有强制(单一)-d <database name>
依赖关系的原因是,备份文件可以包含多个数据库的备份,在这种情况下,这些数据库的名称将包含在备份文件中。