postgresql:pg_restore错误“详细信息:目前不允许进行系统目录修改。”

时间:2017-08-16 02:10:30

标签: postgresql pg-restore

我正在尝试将笔记本电脑上的开发数据库传输到工作站。它给了我各种错误,我不知道如何正确恢复这个数据库转储。没有-1它完成了,但丢失了很多对象。

目标计算机上的数据库名称与从中转储的db不同。但我看不出怎么会与错误有关。这个转储/恢复的东西完全是新的。我无法在pg_restore -l中看到有关系统目录的任何信息我没有线索......

D:\db>pg_restore -d checkpoint -U postgres --disable-triggers -x -O -
1 -v -n temp dump-1.backup
pg_restore: connecting to database for restore
Password:
pg_restore: creating TYPE "temp.my_agg"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 1037; 1247 89882 TYPE my_agg po
stgres
pg_restore: [archiver (db)] could not execute query: ERROR:  permission denied t
o create "pg_catalog.my_agg"
DETAIL:  System catalog modifications are currently disallowed.
    Command was: CREATE TYPE my_agg AS (
        ecnt integer,
        eids integer
);

丢弃-n temp似乎摆脱了特权问题。但还有更多的错误

pg_restore: creating FUNCTION "public.cmptime(timestamp without time zone, text,
 timestamp without time zone, text, text)"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 355; 1255 60129 FUNCTION cmptim
e(timestamp without time zone, text, timestamp without time zone, text, text) po
stgres
pg_restore: [archiver (db)] could not execute query: ERROR:  language "plv8" doe
s not exist
    Command was: CREATE FUNCTION cmptime(t0 timestamp without time zone, s0 text
, t1 timestamp without time zone, s1 text, rcode text) RETURN...
手动创建plv8和plpython扩展后的

。那些语言错误消失了。我遇到了这个FDW表的问题。

pg_restore: creating FOREIGN TABLE "public.t1"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 204; 1259 25543 FOREIGN TABLE r
edrawing postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  server "myserver1"
does not exist
    Command was: CREATE FOREIGN TABLE t1 (
    fid bigint,
    pd_date text,
    team text,
    shift text,
    line text,
    opr1 te...

我尝试创建FDW扩展。但FDW依赖于公共架构。 删除-c --if-exists pg_restore选项,在每次还原尝试之前重新创建检查点数据库。

pg_restore: [archiver (db)] could not execute query: ERROR:  server "myserver1"
does not exist
    Command was: CREATE FOREIGN TABLE t1 (
    fid bigint,
    pd_date text,
    team text,
    shift text,
    line text,
    opr1 te...

还有FDW的问题。在遇到每个新的FDW错误之后,我必须创建每个FDW服务器(我不记得它们全部)。循环此过程,直到所有FDW服务器错误消失 (这真的是无差错的dababase恢复应该怎么做....?)。 下一个错误

pg_restore: [archiver (db)] could not execute query: ERROR:  server "myserver1"
does not exist
    Command was: CREATE FOREIGN TABLE t1 (
    fid bigint,
    pd_date text,
    team text,
    shift text,
    line text,
    opr1 te...

我有物化视图来缓存plpython函数的结果。但是他们的一些逻辑是被贬低的,不能轻易修复。

我想我的无错误恢复在这里结束了。必须删除-1单一交易模式。总误差从55减少到6。看起来大多数物体都回来了。

有没有办法取消选择相应的视图刷新过程......

1 个答案:

答案 0 :(得分:0)

错误消息看起来很奇怪 - 但是如果理解得很好,PostgreSQL会尝试在模式public中恢复自定义数据类型应该禁止的 - 请尝试仅以SQL格式转储模式并确保,因此有没有直接修改pg_catalogue计划。

首先应安装扩展 - 扩展安装有两个部分1:将rpm /编译代码安装到数据库服务器,2:每个数据库扩展注册。只有第二步应该通过备份来完成。

错误消息pg_restore: [archiver (db)] could not execute query: ERROR: server "myserver1" does not exist很干净 - 可能是语句CREATE SERVER失败的地方 - 可能是由于服务器上缺少扩展名。