我正在使用pg_dump / pg_restore备份和还原PostgreSQL数据库,但是从pg_restore收到一些错误消息(以及非零退出状态)。我尝试了一个超级简单的基本案例(下面概述),但仍然出现以下错误:
pg_restore:[存档(db)]处理目录时出错: pg_restore:[archiver(db)]来自TOC条目5的错误;2615 2200 SCHEMA公共邮递区号 pg_restore:[存档(db)]无法执行查询:错误:模式“ public”已经存在 命令是:CREATE SCHEMA public;
重现步骤:
- 安装一个新的原始Ubuntu 14.04发行版(我正在将Vagrant与该Vagrant框一起使用)。
- 安装PostgreSQL 9.3,配置为允许来自任何Linux用户的PostgreSQL用户“ postgres”本地连接。
创建一个测试数据库。我只是在做:
vagrant @ vagrant-ubuntu-trusty-64:〜$ psql --username = postgres postgres psql(9.3.5) 键入“帮助”以获得帮助。 postgres =#创建数据库mydb; 创建数据库 postgres =#\ q vagrant @ vagrant-ubuntu-trusty-64:〜$ psql --username = postgres mydb psql(9.3.5) 键入“帮助”以获得帮助。 mydb =#创建表数据(entry bigint); 创建表 mydb =#插入数据值(1); 插入0 1 mydb =#插入数据值(2); 插入0 1 mydb =#插入数据值(3); 插入0 1 mydb =#\ q
像这样创建数据库的备份:
PGPASSWORD =“ postgres” pg_dump --dbname = mydb --username = postgres --format = custom> pg_backup.dump
从mydb的数据表中删除一些行,以便我们能够确定是否成功还原了数据。
使用以下方法还原数据库:
PGPASSWORD =“ postgres” pg_restore --clean --create --dbname = postgres --username = postgres pg_backup.dump
数据已还原,但是步骤6中的pg_restore命令以状态退出1
并显示以下输出:
pg_restore:[存档(db)]处理目录时出错: pg_restore:[archiver(db)]来自TOC条目5的错误;2615 2200 SCHEMA公共邮递区号 pg_restore:[存档(db)]无法执行查询:错误:模式“ public”已经存在 命令是:CREATE SCHEMA public; 警告:还原时忽略错误:1
我不能仅仅忽略这一点,因为我正在以编程方式运行此命令,并且需要使用退出状态来确定还原是否失败。最初,我想知道这个问题是否是因为我将数据库公开(默认架构)。我以为--create
pg_restore会在还原数据之前根据该选项创建public (这可以想象也可以尝试创建该模式,因为那是我的表所在的位置),但是当我尝试对表进行上述步骤时在不同的架构中,结果是相同的,并且错误消息是相同的。
难道我做错了什么?为什么会看到此错误?
--create
没有clean
不能解决的问题。