如何创建自定义函数来分析 postgres 中的表
Posted
技术标签:
【中文标题】如何创建自定义函数来分析 postgres 中的表【英文标题】:how to create custom function to analyze tables in postgres 【发布时间】:2015-02-20 21:33:08 【问题描述】:我正在尝试设置一个在周末分析表格的函数。
create or replace function public.sp_analyze(t text)
returns void as
$$
BEGIN
if to_char(current_Date,'dy') = 'fri' THEN
--RAISE NOTICE '%', t;
execute 'vacuum analyze' || t
end if;
end;
$$
LANGUAGE plpgsql SECURITY DEFINER;
有没有办法在不抛出错误的情况下执行我的分析命令?
这是我的错误:
ERROR: 42601: syntax error at or near "end"
【问题讨论】:
错误:42601:“结束”处或附近的语法错误 请参考 -> postgresql.org/message-id/… 引用它:你不能在函数中使用 VACUUM 因为它不是事务安全操作。 【参考方案1】:通过查看代码,我怀疑您遇到的错误与不存在的关系有关。
代码execute 'vacuum analyze' || t
会将直接传入的文本附加到字符串中。
说t
是foo。将尝试成为execute
d 的结果字符串将是:
execute 'vacuum analyzefoo'
这会产生这种形式的错误:
错误:关系“analyzefoo”不存在
我怀疑是您看到的错误类型。
如果在常量字符串中添加空格,例如:
execute 'vacuum analyze ' || t;
这将被避免。
根据 OP 的评论进行编辑:
如果命令中有空格(这意味着t
中有空格),那么很可能execute
语句中缺少分号 导致语法错误。我在上面的代码 sn-p 中添加了它。
【讨论】:
谢谢,但命令后有空格。我只是不认为它在接受我的分析声明。以上是关于如何创建自定义函数来分析 postgres 中的表的主要内容,如果未能解决你的问题,请参考以下文章