0
可変数の列を持つテーブルに動的なinsert
を実行する必要があります。今、私はquote_nullable
で、quote_ident
と列名、および実際の値の両方を引用して、array_to_string
でそれらに参加してい配列をレコード/タプル/行型に変換するにはどうすればよいですか?
:
for ... loop
...
cols := array_append(cols, quote_ident(column_name));
vals := array_append(vals, quote_nullable(column_value));
end loop;
execute format('insert into %s (%s) values (%s)',
target_table,
array_to_string(cols, ', ')
array_to_string(vals, ', ')
);
それがパターンだが含めて、すべての場所で見つかりました公式文書に記載されています。しかし、それは少し汚れているように感じます。私が達成したいものです
execute format('insert into %s (%s) ... $1 ...',
target_table,
array_to_string(cols, ', ')
)
using vals;
お知らせusing vals
、:私はむしろusing
句で値の配列パラメータを渡すと思います。しかし、insert
ステートメントのドットを埋めることができないようです。多分何らかの種類のselect ... from ...
?
さらに一般的には、配列をレコード/タプル/行型にするにはどうすればよいですか?
クエリのSQL部分を作成しているので、 'quote_ident'はOKです。しかし、私は値の 'quote_nullable'をすべて避け、配列パラメータとして渡す方法を探しています。 – Tobia
私はあなたがしていたことを全く誤解しました。 – Jasen