plpgsql(postgres)REINDEX查询中的变量替换

时间:2013-06-25 12:39:10

标签: postgresql-9.1

--DROP FUNCTION tempscript();
CREATE OR REPLACE FUNCTION tempscript()
  RETURNS integer AS
 $BODY$ 
DECLARE
my_index TEXT;
b integer;
BEGIN
my_index := 'example_index';
RAISE NOTICE '% ', my_index;
reindex index my_index; /* problem with this line , we are not able to pass local variable as paramenter*/

b :=2;
return b;
END;
$BODY$
LANGUAGE 
plpgsql VOLATILE
  COST 100;

SELECT * from tempscript();

请在上面的代码中找到我的评论,我正面对这个问题。

请让我知道解决方案或解决方法。

谢谢。

1 个答案:

答案 0 :(得分:1)

根据用户手册,您只能使用允许查询参数的变量。这不包括标识符和实用程序语句。

您需要将the PL/pgSQL EXECUTE statement用于动态SQL。

EXECUTE format('REINDEX %I', my_index);

另外,如果您需要自动化REINDEX,那么您几乎肯定会做其他错误的事情。在大多数情况下,它不应该是必要的。也许你已经把autovacuum打得太远了,所以它没能跟上?

如果您正在编写一次性函数,请使用DO块,这样您就不必创建,执行和删除该函数。