【发布时间】:2019-11-14 14:53:37
【问题描述】:
我有一个程序函数(用 pl/python 编写),它查询表 A,进行一些计算,然后返回一个集合。我使用这个函数作为我的物化视图 B 的查询。 一切正常,除了当我想恢复我的转储时,我收到以下错误:
详细信息:spiexceptions.UndefinedTable:关系“A”不存在。
引发此错误的行是我的 sql 转储的最后一行:
REFRESH MATERIALIZED VIEW B;
我知道我可以忽略此错误并在恢复过程后刷新我的物化视图,但我想知道为什么会发生这种情况?是因为这个函数在另一个对当前恢复过程一无所知的事务中运行吗?我可以做些什么来防止这个错误?
【问题讨论】:
-
你确定它叫
A而不是a吗?您的视图称为b,但您将其称为B。 (“我使用这个函数作为我的物化视图 B 的查询。”)但是REFRESH MATERIALIZED VIEW B刷新了一个名为b而不是B的视图。如果不清楚,引用标识符使其区分大小写,不引用导致标识符全小写,无论您写什么。因为您没有引用B,所以它将是b。因为它没有说b不存在,所以b视图存在,但A不存在。由于您的视图是小写的,我怀疑您的表也是。 -
另一种可能是您忘记对表进行架构限定,而
search_path不同。 -
不,它与表名无关。正如我所说,当我手动刷新它时它可以工作。
-
我的表不符合模式。我只有公共架构,正如我所说,当我手动运行刷新命令时它可以工作。
标签: postgresql materialized-views plpython