如何创建自定义函数来分析 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 会将直接传入的文本附加到字符串中。

tfoo。将尝试成为executed 的结果字符串将是:

execute 'vacuum analyzefoo'

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

错误:关系“analyzefoo”不存在

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

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

execute 'vacuum analyze ' || t;

这将被避免。

根据 OP 的评论进行编辑:

如果命令中有空格(这意味着t 中有空格),那么很可能execute 语句中缺少分号 导致语法错误。我在上面的代码 sn-p 中添加了它。

【讨论】:

谢谢,但命令后有空格。我只是不认为它在接受我的分析声明。

以上是关于如何创建自定义函数来分析 postgres 中的表的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中如何查看自定义函数的源代码?

如何列出为 postgres 中的表创建的索引

自定义窗口函数忽略 Postgres 中的空值

如何将自定义类型数组传递给 Postgres 函数

为 Postgres 分区创建自定义哈希运算符

从 postgres 函数映射自定义结果记录时面临问题