Postgresql 如何还原postgres备份-错误:无法删除当前打开的数据库
我正在尝试从一个不再配置的系统恢复postgres备份,根据我的尝试,我会收到一系列错误Postgresql 如何还原postgres备份-错误:无法删除当前打开的数据库,postgresql,pg-restore,Postgresql,Pg Restore,我正在尝试从一个不再配置的系统恢复postgres备份,根据我的尝试,我会收到一系列错误 我只有备份,没有原始服务器可供参考 我过去曾成功地从这些生产备份中恢复,但自从上次成功后,我的本地环境就变得一团糟(例如通过自制重新安装了postgres) 我相信一位前同事(不再可用)已成功恢复了此特定备份 我在以下情况下遇到了相同的错误: 正在尝试使用备份postgresql@9.4 尝试以前已知的良好版本的数据库(使用postgres 11) (我读过相关/建议的问题,但它们似乎并不相关) 使
- 我只有备份,没有原始服务器可供参考
- 我过去曾成功地从这些生产备份中恢复,但自从上次成功后,我的本地环境就变得一团糟(例如通过自制重新安装了postgres)
- 我相信一位前同事(不再可用)已成功恢复了此特定备份
- 我在以下情况下遇到了相同的错误:
- 正在尝试使用备份postgresql@9.4
- 尝试以前已知的良好版本的数据库(使用postgres 11)
dropdb${PGDATABASE}
createdb${PGDATABASE}
时间pgu恢复\
-j4\
-d${PGDATABASE}\
--创造\
--没有特权\
--无主\
--干净的\
--如果存在\
--出错退出\
“${dirname}/${filename}”
在本地运行restore命令时,会得到以下结果:
time pg_restore-j4-d${PGDATABASE}--创建--没有权限--没有所有者--清除--如果存在--出错退出../backups/backup_2019-09-03_16-00-19.pg_dump
pg_restore:[archiver(db)]处理TOC时出错:
pg_restore:[archiver(db)]来自TOC条目4954的错误;1262 962277数据库mydb mydb
pg_restore:[archiver(db)]无法执行查询:错误:无法删除当前打开的数据库
命令为:如果存在mydb,则删除数据库;
实际0.049秒
用户0m0.019s
sys 0m0.012s
以前,我只在运行几分钟后出现过“磁盘空间不足错误”,但是从time
输出中可以看到,此错误几乎立即发生
备份是使用压缩创建的-Fc
,我可以使用pg_restore backup.pg_dump>backup.sql
,将备份反压缩为纯文本,但我在其中找不到任何与DROP DATABASE
相关的命令:/
--从数据库版本9.6.11中转储
--由PGU转储版本11.3(Ubuntu 11.3-1.pgdg14.04+1)转储
我看到DB最初是从9.6.11
中转储的,但我有理由相信我以前成功地用第10页恢复了它
我尝试过各种方法,比如:
time pg_restore-d${PGDATABASE}--没有特权--没有所有者--出现错误时退出../backups/backup_2019-09-03_16-00-19.pg_dump
pg_restore:[archiver(db)]处理TOC时出错:
pg_restore:[archiver(db)]来自TOC条目7的错误;2615 1033373模式公共mydb
pg_restore:[archiver(db)]无法执行查询:错误:架构“public”已存在
命令为:创建公共模式;
ptim:dropdb-mydb;createdb mydb
ptim:gizmag ptim$dropdb mydb
ptim:gizmag ptim$time pg_restore-d${PGDATABASE}--创建--没有特权--没有所有者--出错时退出../backups/backup_2019-09-03_16-00-19.pg_dump
pg_restore:[archiver(db)]与数据库“mydb”的连接失败:致命:数据库“mydb”不存在
#我猜我误解了创建标志!
ptim:gizmag ptim$dropdb mydb;createdb mydb
dropdb:数据库删除失败:错误:数据库“mydb”不存在
ptim:gizmag ptim$time pg_restore-d${PGDATABASE}--创建--没有特权--没有所有者--出错时退出../backups/backup_2019-09-03_16-00-19.pg_dump
pg_restore:[archiver(db)]处理TOC时出错:
pg_restore:[archiver(db)]来自TOC条目4954的错误;1262 962277数据库mydb mydb
pg_restore:[archiver(db)]无法执行查询:错误:数据库“mydb”已存在
命令是:使用TEMPLATE=template0 ENCODING='UTF8'LC_COLLATE='en_US.UTF-8'LC_CTYPE='en_US.UTF-8'创建数据库mydb;
我还尝试从纯文本转储还原,但未成功:
psql-U ptim-d mydb-1-f../backups/backup\U 2019-09-03\U 16-00-19.sql
设置
设置
设置
设置
设置
设置配置
------------
(1排)
设置
设置
设置
设置
psql:../backups/backup\u 2019-09-03\u 16-00-19。sql:23:错误:架构“public”已存在
psql:../backups/backup\u 2019-09-03\u 16-00-19。sql:26:错误:当前事务被中止,在事务块结束之前忽略命令
#剪断。。。重复的,不同的错误接踵而至
有什么建议吗 多亏了没有名字的@a_horse_的提示,我学会了:
-C
,-create
在还原到数据库之前创建数据库。如果还指定了--clean
,请在连接到目标数据库之前删除并重新创建该数据库
使用此选项时,名为-d
的数据库仅用于发出初始删除数据库
和创建数据库
命令。所有数据都将恢复到存档中显示的数据库名称中
(请注意,--create
在较新版本的中有进一步的、不相关的影响)
我的解决方案是删除--create
参数:
dropdb ${PGDATABASE}
createdb ${PGDATABASE}
time pg_restore \
-j4 \
-d ${PGDATABASE} \
--no-privileges \
--no-owner \
--clean \
--if-exists \
--exit-on-error \
backup.pg_dump
如果使用
--create
,则需要连接到不同的数据库,例如postgres
或template1
--create
选项)您的评论让我找到了--create
的解释:-再次感谢!你想补充一个答案,还是我应该补充一个?我试着做类似的事情,并按照官方文件使用——创建,这给了我很多错误和担忧。通过删除--create并仅使用--clean,这似乎是正常的。
dropdb ${PGDATABASE}
createdb ${PGDATABASE}
time pg_restore \
-j4 \
-d ${PGDATABASE} \
--no-privileges \
--no-owner \
--clean \
--if-exists \
--exit-on-error \
backup.pg_dump