gpt4 book ai didi

postgresql - plpgsql 中的 "perform create index"没有运行

转载 作者:行者123 更新时间:2023-11-29 14:03:42 25 4
gpt4 key购买 nike

我在 plgpsql 函数 (postgres 9.4) 中执行“执行创建索引”时遇到问题。例如:

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;

仍然没有运气。

最佳答案

What @Abelisto wrote关于PERFORM
what @Chris added关于 SQL 注入(inject)。

另外,我建议对除了最琐碎的查询字符串之外的任何内容使用 format() 以使您使用动态 SQL 的生活更轻松。 And the manual does, too:

A cleaner approach is to use format()'s %I specification for table or column names.

CREATE OR REPLACE FUNCTION foo(_tbl text)
RETURNS void AS
$func$
BEGIN
EXECUTE format('CREATE UNIQUE INDEX %I ON %I(row_id)', _tbl || _row_id_key', _tbl);
END
$func$ LANGUAGE plpgsql;

regclass 参数是传递表名的一种方便的替代方法,但连接新标识符可能很棘手 - 正如最近的相关案例所示:

关于postgresql - plpgsql 中的 "perform create index"没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com