我有一个过程函数(用pl/python编写),它查询表A,做一些计算,然后返回一个集合。我将此函数用作对物化视图B的查询。除了希望恢复转储时,所有操作都很完美,得到以下错误:
DETAIL: spiexceptions.UndefinedTable:关系"A“不存在。
引发此错误的行是我的sql转储的最后一行:
REFRESH MATERIALIZED VIEW B;
我知道我可以忽略这个错误并在恢复过程之后刷新我的物化视图,但是我想知道为什么会发生这种情况?是因为这个函数运行在另一个不了解当前恢复过程的事务中吗?我能做些什么来防止这个错误呢?
发布于 2019-11-14 21:34:54
出于安全原因,pg_dump (或pg_restore)发出一个清空search_path的命令,因此,当您还原该进程时,将使用一个空的搜索路径运行该进程。但是它根本不编辑函数的文本正文,而是按原样发布,因此它不能更改它以指定表的完全限定名。因此,在执行还原的进程中运行时,函数无法找到表。
您可以完全限定函数中的表名,也可以用SET search_path = public定义函数。或者,如果您不关心安全性问题,则可以编辑转储文件以删除清除search_path的部分。
https://stackoverflow.com/questions/58859643
复制相似问题