谷歌搜索后,很明显你不能从函数运行真空:
Postgres 邮件 - plpgsql 函数中的真空行为
由于内存管理限制,您无法从函数内部运行 VACUUM。在当前来源中有一个错误检查以防止您尝试。
Stackoverflow - 无法从函数或多命令字符串执行 VACUUM
加载数据后,我想对受影响的表进行“真空分析”,既要从已删除的记录中恢复空间,又要准确反映新内容。[...] 当我运行这个时,我得到:
ERROR: VACUUM cannot be executed from a function or multi-command string
但是我真的需要在运行某个函数时“自动”运行vacuum:这个函数更新了很多记录(如果不是全部),所以死行的数量增加得非常快,其他查询性能下降很多。问题是该函数是从另一个程序调用的。任何最佳实践?我应该在函数执行后手动将真空语句添加到一段单独的代码中,就像
sql = SELECT my_function()
<program.execute(sql)>
sql = VACUUM [FULL | ANALYZE] my_updated_table
<program.execute(sql)>