--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();
请在上面的代码中找到我的评论,我正面对这个问题。
请让我知道解决方案或解决方法。
谢谢。
答案 0 :(得分:1)
根据用户手册,您只能使用允许查询参数的变量。这不包括标识符和实用程序语句。
您需要将the PL/pgSQL EXECUTE
statement用于动态SQL。
EXECUTE format('REINDEX %I', my_index);
另外,如果您需要自动化REINDEX
,那么您几乎肯定会做其他错误的事情。在大多数情况下,它不应该是必要的。也许你已经把autovacuum打得太远了,所以它没能跟上?
如果您正在编写一次性函数,请使用DO
块,这样您就不必创建,执行和删除该函数。