Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 从pg_dumpall恢复Postgres:关系不存在,命令无效\N_Database_Postgresql - Fatal编程技术网

Database 从pg_dumpall恢复Postgres:关系不存在,命令无效\N

Database 从pg_dumpall恢复Postgres:关系不存在,命令无效\N,database,postgresql,Database,Postgresql,我在一台Linux服务器上运行了pg_dumpall,并试图在另一台Linux服务器上恢复生成的文件,该服务器运行相同版本的postgres(8.1.21-1.el5_5.1) 当我尝试还原时,会出现以下错误: # psql --user=postgres -f pgbackup_dcs.sql postgres [...] psql:pgbackup_dcs.sql:10753: ERROR: relation "sl_event" does not exist psql:pgbackup_

我在一台Linux服务器上运行了pg_dumpall,并试图在另一台Linux服务器上恢复生成的文件,该服务器运行相同版本的postgres(8.1.21-1.el5_5.1)

当我尝试还原时,会出现以下错误:

# psql --user=postgres -f pgbackup_dcs.sql postgres
[...]
psql:pgbackup_dcs.sql:10753: ERROR:  relation "sl_event" does not exist
psql:pgbackup_dcs.sql:10754: invalid command \N
psql:pgbackup_dcs.sql:10755: invalid command \N
psql:pgbackup_dcs.sql:10756: invalid command \N
psql:pgbackup_dcs.sql:10757: invalid command \N
psql:pgbackup_dcs.sql:10758: invalid command \N
psql:pgbackup_dcs.sql:10759: invalid command \N
[there are a lot of other errors following this point]
转储文件中的这些行如下所示(这里的第一行是10753)


我是否在转储或恢复中出错?如何在新服务器上恢复DBs?

使用pg_dump一次转储一个数据库。 我认为一次转储一个数据库是个好主意。
我们使用了所有不需要像template0、postgres等转储系统数据库的方法。

备份中是否有创建表sl_事件(…)?您试图将内容复制到一个不存在的表中,该表必须在备份中丢失,或者是在copy语句之后创建的。

经过大量查找,我在postgres library目录中发现了一些来自Slony的额外库文件(xxid.sl和一些名称中带有“Slony”的文件),将这些数据复制到目标服务器后,导入过程正常。

您是否有可能只备份数据?例如,pg_dumpall-a将拒绝创建您的表,并将导致类似的结果。除此之外,我的猜测是,如果不是这样的话,那么您就有一个上游错误导致了这种情况。

我找到了这个修复程序,它成功了

首先删除/删除要完全还原的数据库

su - postgres
createdb -T template0 dbname
psql -U username -d dbname -f dumpfile
原因是当该
pg_dump
创建一个相对于template0的.dmp文件时,该文件可能与用于创建数据库的文件不同

然后请结束问题。但这并不能解释为什么会断裂。更常见的情况是此问题和修复:
su - postgres
createdb -T template0 dbname
psql -U username -d dbname -f dumpfile