pg_restore: [archiver (db)] 在处理TOC时发生错误:
pg_restore: [archiver (db)] 来自TOC条目5的错误;2615 2200 SCHEMA public postgres
pg_restore: [archiver (db)] 无法执行查询:ERROR: schema "public" already exists
Command was: CREATE SCHEMA public;
重现步骤:
- 安装一个新鲜的、原始的Ubuntu 14.04发行版(我正在使用带有this Vagrant box的Vagrant)。
- 安装PostgreSQL 9.3,并配置为允许来自任何Linux用户的本地连接,作为PostgreSQL用户"postgres"。
创建一个测试数据库。我只是执行以下操作:
vagrant@vagrant-ubuntu-trusty-64:~$ psql --username=postgres postgres psql (9.3.5) Type "help" for help. postgres=# create database mydb; CREATE DATABASE postgres=# \q vagrant@vagrant-ubuntu-trusty-64:~$ psql --username=postgres mydb psql (9.3.5) Type "help" for help. mydb=# create table data(entry bigint); CREATE TABLE mydb=# insert into data values(1); INSERT 0 1 mydb=# insert into data values(2); INSERT 0 1 mydb=# insert into data values(3); INSERT 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
1,并显示以下输出:
pg_restore:[archiver(db)]处理TOC时出错:
pg_restore:[archiver(db)]来自TOC条目5的错误;2615 2200 SCHEMA public postgres
pg_restore:[archiver(db)]无法执行查询:ERROR:模式“public”已存在
命令是:CREATE SCHEMA public;
警告:还原过程中忽略了错误:1
我不能忽视这个问题,因为我正在以编程方式运行此命令,并且需要使用退出状态来确定还原是否失败。最初,我想知道这个问题是否是因为我将数据库放在public(默认模式)中。我推断,在恢复数据之前,pg_restore会通过--create选项创建public模式(可能也会尝试创建该模式,因为那是我的表所在的位置),但当我将上述步骤与我的表放在不同模式中时,结果相同,错误消息也相同。
我做错了什么吗?为什么会出现这个错误?
clean的情况下指定了--create,但这并没有解决问题。 - Cerin