我在plgpsql函数(postgres 9.4)中执行“perform create index”时遇到问题。例如:
create or replace function foo() returns void language plpgsql as $$
begin
perform 'create unique index patients_row_id_key on patients(row_id)';
end; $$;
似乎一切顺利:
select foo();
但是,不会创建索引。有什么诊断和解决办法吗?我试过:
alter function foo() VOLATILE;
仍然没有运气。
最佳答案
PERFORM
PLPGSQL中的语句,用于执行不返回结果或结果无效的查询。从技术上讲,PLPGSQL块中的PERFORM ...
等于普通SQL中的SELECT ...
。所以在你的例子中,你试图执行
select 'create unique index patients_row_id_key on patients(row_id)';
忽略结果。
阅读更多:Executing a Command With No Result
不应将DDL语句包装在PLPGSQL中,可以按原样使用它:
create or replace function foo() returns void language plpgsql as $$
begin
create unique index patients_row_id_key on patients(row_id);
end; $$;
或者如果您想在运行时构造它,那么使用EXECUTE语句:Executing Dynamic Commands如下:
create or replace function foo(p_tablename text) returns void language plpgsql as $$
begin
execute 'create unique index ' || p_tablename || '_row_id_key on ' || p_tablename || '(row_id)';
end; $$;
关于postgresql - plpgsql中的“执行创建索引”未运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38016764/