Postgres从pg_dumpall还原时出现问题:关系不存在,命令\N无效。

3
我在Linux服务器上运行了pg_dumpall命令,并试图在另一台运行相同版本Postgres(8.1.21-1.el5_5.1)的Linux服务器上恢复生成的文件。
当我尝试进行恢复时,会出现以下错误:
# 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)。
COPY sl_event (ev_origin, ev_seqno, ev_timestamp, ev_minxid, ev_maxxid, ev_xip, ev_type, ev_data1, ev_data2, ev_data3, ev_data4, ev_data5, ev_data6, ev_data7, ev_data8) FROM stdin;
1       687653  2010-12-08 11:54:45.669861      36713740        36713741                SYNC    \N      \N      \N      \N      \N      \N      \N      \N
1       687654  2010-12-08 11:54:55.6757        36713769        36713770                SYNC    \N      \N      \N      \N      \N      \N      \N      \N
1       687655  2010-12-08 11:55:05.68132       36713796        36713797                SYNC    \N      \N      \N      \N      \N      \N      \N      \N

我在备份和恢复过程中出了什么问题?如何在新服务器上恢复数据库?

5个回答

1

备份中是否有 CREATE TABLE sl_event(....)?您试图将内容复制到不存在的表中,这可能是备份中缺失或在复制语句之后创建的。


0

使用pg_dump一次转储一个单独的数据库。 我认为一次转储一个单独的数据库是个好主意。 我们通常不需要转储系统数据库,如template0、postgres等。


0
经过大量搜索,我在postgres库目录中找到了一些额外的库文件,这些文件来自于Slony(xxid.sl和一些带有“slony”名称的文件),将它们复制到目标服务器后,导入过程顺利进行。

那么请关闭这个问题。但是这并没有解释是什么导致了错误以及为什么会出现这种情况。通常的问题和解决方法是:http://blog.andrewvc.com/invalid-command-n-and-restoring-postgresql-du。 - smci

0

我找到了一个解决方法,它有效果了

首先彻底删除要还原的数据库

su - postgres
createdb -T template0 dbname
psql -U username -d dbname -f dumpfile

原因是当pg_dump创建一个.dmp文件时,它是相对于template0的,而这可能与用于创建数据库的模板不同 http://openacs.org/forums/message-view?message_id=148479


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接