在postgres 9.1中,我想創建一個函數,該函數採用索引名稱,表名和可變數量的列,構造一個索引,然後執行其他一些操作。在plpgsql中,如何使用可變數量的標識符創建並執行命令字符串?
我目前的做法是使用PLPGSQL並構建一個動態的命令來執行。然而,當我嘗試使用quote_ident
來保護所有的標識符時,我會被絆倒。代碼迄今:
ERROR: too few arguments for format
我在做什麼錯了:通過一個名字的時候,但是有兩個或更多的我收到以下錯誤
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;
的代碼似乎是成功的? (據推測一些與format
或我使用VARIADIC
)
謝謝!
我想你可能已經。發現了一個bug,請參閱答案 –