错误:无法从函数执行 CREATE MATERIALIZED VIEW ...WITH DATA

Héc*_*tor 3 postgresql stored-procedures materialized-view functions postgresql-15

我需要CREATE MATERIALIZED VIEW ... WITH DATA从函数/过程执行,但我得到了ERROR: CREATE MATERIALIZED VIEW ... WITH DATA cannot be executed from a function.

除了使函数返回创建查询文本并复制粘贴以执行它之外,还有其他解决方法吗?

看起来真的很傻,但我想这背后有一个很好的理由......无论如何,这个限制有什么解决方法吗?

我正在运行 postgresql 15。

mus*_*cio 5

这是为了保证操作的原子性和一致性。正如源代码注释中所述,一些语句

不得在事务块内运行,通常是因为它们具有不可回滚的副作用或进行内部提交。[...] 如果我们似乎在用户定义的函数内运行(这可能会发出更多命令,并可能在语句完成后导致失败),则会发出错误。

由于CREATE MATERIALIZED VIEW ... WITH DATA至少做了两件事:创建一个表,然后用数据填充它,因此它可能有内部提交,因此会出现错误。