如何创建自定义函数来分析postgres中的表

时间:2015-02-20 21:33:08

标签: postgresql function greenplum

我正在尝试设置一个在周末分析表格的函数。

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"

1 个答案:

答案 0 :(得分:1)

通过查看代码,我怀疑你得到的错误是关于不存在的关系。

代码execute 'vacuum analyze' || t将附加直接传递给字符串的文本。

假设t foo 。尝试为execute d的结果字符串将为:

execute 'vacuum analyzefoo'

这会产生这种形式的错误:

  

错误:关系" analyzefoo"不存在

我怀疑是你看到的错误类型。

如果在常量字符串中添加了空格,例如:

execute 'vacuum analyze ' || t;

这将被避免。

根据OP的评论进行编辑:

如果命令中有空格(这意味着t中有空格),则{{1}上可能缺少分号语句导致语法错误。我已在上面的代码段中添加了该内容。