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;
1つの列名を渡すとコードは成功したように見えますが、2つ以上あると、次のエラーが発生します。
ERROR: too few arguments for format
私は何が間違っているのですか?(おそらく、format
または私の使用で何かVARIADIC
。)
ありがとうございました!