在 postgres 9.1 中,我想创建一个函数,它接受一个索引名称、一个表名称和可变数量的列,构造一个索引,然后做一些其他的事情。
我目前的方法是使用 plpgsql 并构造一个动态命令来执行。quote_ident
但是,当我试图用来保护所有标识符时,我被绊倒了。到目前为止的代码:
CREATE OR REPLACE FUNCTION my_create_index(indexname text, tablename text, VARIADIC arr text[]) RETURNS void AS $$
DECLARE
command_string text;
BEGIN
command_string := 'CREATE INDEX ' || quote_ident(indexname) || ' ON ' ||
quote_ident(tablename) || ' (' ||
format(repeat('%I ', array_length($3, 1)), VARIADIC $3) ||
')';
-- display the string
RAISE NOTICE '%', command_string;
-- execute the string
EXECUTE command_string;
-- (do other stuff)
END;
$$ LANGUAGE plpgsql;
传递一个列名时,代码似乎是成功的,但有两个或更多时,我收到以下错误:
ERROR: too few arguments for format
我究竟做错了什么?(大概是format
我使用或使用的东西VARIADIC
。)
谢谢!