我正在尝试设置一个在周末分析表格的函数。
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"
答案 0 :(得分:1)
通过查看代码,我怀疑你得到的错误是关于不存在的关系。
代码execute 'vacuum analyze' || t
将附加直接传递给字符串的文本。
假设t
是 foo 。尝试为execute
d的结果字符串将为:
execute 'vacuum analyzefoo'
这会产生这种形式的错误:
错误:关系" analyzefoo"不存在
我怀疑是你看到的错误类型。
如果在常量字符串中添加了空格,例如:
execute 'vacuum analyze ' || t;
这将被避免。
根据OP的评论进行编辑:
如果命令中有空格(这意味着t
中有空格),则{{1}上可能缺少分号语句导致语法错误。我已在上面的代码段中添加了该内容。