私はPostgreSQLのあるテーブルから別のテーブルにカラムのセットを動的に挿入しようとしています。私がしたいと思うのは、列の見出し(表1にある列 - ストレージ表)の「チェックリスト」に読み込まれ、エクスポート表(表2)に存在する場合はすべて表2はその列で可変であるが、一旦インポートされると、潜在的に異なる列構造でインポートされる新しいデータをインポートする。だから私はそれを列名に基づいてインポートする必要があります。PostgreSQL - カラム名の動的INSERT
表1 - ストレージテーブル
ID NAME YEAR LITH_AGE PROV_AGE SIO2 TIO2 CAO MGO COMMENTS
1 John 1998 2000 3000 65 10 5 5 comment1
2 Mark 2005 2444 3444 63 8 2 3 comment2
3 Luke 2001 1000 1500 77 10 2 2 comment3
表2 - エクスポートテーブル
ID NAME MG# METHOD SIO2 TIO2 CAO MGO
1 Amy 4 Method1 65 10 5 5
2 Poe 3 Method2 63 8 2 3
3 Ben 2 Method3 77 10 2 2
あなたは、ストレージテーブルに存在しない列が含まれるエクスポートテーブルを見ることができるようにこれらは無視されます。
これらの列をすべて一度に挿入したいのですが、列ごとに行を追加すると、挿入のたびに行の数が増えます(おそらく誰かがこの問題を解決できますか?テーブル2にカラム名が存在するかどうかをチェックする関数を記述しました。挿入すると、テーブルの行が毎回拡張され、残りのカラムはNULLとなります)。 私の関数からINSERTライン:「列」は、輸出に存在する列を表すいくつかの変数になり
EXECUTE FORMAT('INSERT INTO table1 (%s) (SELECT (%s) FROM table2)',columns)
:私の質問のための「コード例」の種類として
EXECUTE format('INSERT INTO %s (%s) (SELECT %s::%s FROM %s);',_tbl_import, _col,_col,_type,_tbl_export);
にテーブルをストレージテーブルに移動する必要があります。毎回表2が異なるため、これは可変です。
これは、理想的には、表1を更新します:
ID NAME YEAR LITH_AGE PROV_AGE SIO2 TIO2 CAO MGO COMMENTS
1 John 1998 2000 3000 65 10 5 5 comment1
2 Mark 2005 2444 3444 63 8 2 3 comment2
3 Luke 2001 1000 1500 77 10 2 2 comment3
4 Amy NULL NULL NULL 65 10 5 5 NULL
5 Poe NULL NULL NULL 63 8 2 3 NULL
6 Ben NULL NULL NULL 77 10 2 2 NULL
私は列でそれを行う必要がある理由として(今追加)の上に指定されている必要があります申し訳ありませんが名。 '表2'は削除され、頻繁に変更されます。テーブル1にデータをインポートするための基本的なテンポラリテーブルです。表2は常に同じ列の組み合わせを持つわけではないため、持っています。私は、テーブル1からどのカラム名が '探しているのか'しか知りません。もし存在すれば、インポートします。 – MattGeo
Ack、それは別の話です。私はあなたがanwserを既に持っているのを見ます:) –