首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql函数执行过程

Postgresql函数执行过程
EN

Stack Overflow用户
提问于 2019-11-14 14:53:37
回答 1查看 86关注 0票数 0

我有一个过程函数(用pl/python编写),它查询表A,做一些计算,然后返回一个集合。我将此函数用作对物化视图B的查询。除了希望恢复转储时,所有操作都很完美,得到以下错误:

DETAIL: spiexceptions.UndefinedTable:关系"A“不存在。

引发此错误的行是我的sql转储的最后一行:

REFRESH MATERIALIZED VIEW B;

我知道我可以忽略这个错误并在恢复过程之后刷新我的物化视图,但是我想知道为什么会发生这种情况?是因为这个函数运行在另一个不了解当前恢复过程的事务中吗?我能做些什么来防止这个错误呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 21:34:54

出于安全原因,pg_dump (或pg_restore)发出一个清空search_path的命令,因此,当您还原该进程时,将使用一个空的搜索路径运行该进程。但是它根本不编辑函数的文本正文,而是按原样发布,因此它不能更改它以指定表的完全限定名。因此,在执行还原的进程中运行时,函数无法找到表。

您可以完全限定函数中的表名,也可以用SET search_path = public定义函数。或者,如果您不关心安全性问题,则可以编辑转储文件以删除清除search_path的部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58859643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档