0
--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();

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

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

谢谢你。

4

1 回答 1

1

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

您需要将 PL/pgSQLEXECUTE语句用于动态 SQL。

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

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

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

于 2013-06-25T13:07:28.120 回答