コマンドを動的に構築するための基本的なクエリ:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
これにより、次のようなクエリが生成されます:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
引用符で囲まれた大文字のスペルに注意してください。引用符で囲まれていない識別子が自動的に小文字に折りたたまれるSQLコマンドとは異なり、テーブル内の文字列では大文字と小文字が区別されるようになりました。
絶対にしないことをお勧めします 識別子を二重引用符で囲み、正当な小文字の名前のみを使用します。
自動化するには:
DO
$$BEGIN
EXECUTE (
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3
-- WHERE table3_id = 123 -- select only *one* row!
);
END$$;
これをplpgsql関数にラップして、追加のパラメータを渡すこともできます: