我正在尝试将笔记本电脑上的开发数据库传输到工作站。它给了我各种错误,我不知道如何正确恢复这个数据库转储。没有-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。看起来大多数物体都回来了。
有没有办法取消选择相应的视图刷新过程......
答案 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
失败的地方 - 可能是由于服务器上缺少扩展名。