0

2 つの csv ファイルがfile1.csvあり、これらのファイルをデータベース ' ' と ' 'file2.csvの 2 つのテーブルに読み込みます。が含まれている 場合、これらの列は列を使用して値を計算します。その後、 の行はに使用されただけなので削除できます。table1table2table1two columnstable2table2update table1

私の質問は:

どちらのソリューションが優れているか:

  1. table2 に挿入すると、table1 の 2 つの列を更新するトリガーが実行され、table1 の 2 つの列を計算するためだけに使用されたため、現在の行が table2 から削除されます。
  2. table2 を削除し、file2 をロードするときに table1 だけを更新します。
  3. 2 つの列を計算列として作成し、それらが仮想列のみになるようにします。
  4. table1 のすべての列で構成されるビューを作成し、このビューに 2 つの計算列を追加します。別の解決策を提案できます
4

2 に答える 2

1

5:

  • TEMPORARYステージング テーブルを作成しますtable2。一時テーブルははるかに優れたパフォーマンスを発揮します (永続化されません)。
  • COPYfile2.csv を入れます。
  • UPDATE表1。

一時テーブルは、セッションの終了時に自動的に削除されます。コード例:
Postgres でレコードが変更されたかどうかを確認する方法

table2繰り返し使用するために、リンクされた回答に示されているように、一時テーブルのテンプレートとして空の永続化を保持できます。
または、そのすべてを plpgsql 関数に入れることもできます (それが私がすることです)。

于 2013-07-23T01:08:50.410 に答える
1

別のオプションは、file_fdw FOREIGN DATA WRAPPER を使用して、db 内から file2.csv を読み取り (ロードする必要なし)、計算結果を に挿入することtable1です。これは、Postgres 9.1 以降を使用していて、file2.csv が大きすぎないことを前提としています。ただし、Erwin からの提案はおそらく最も有用なソリューションです。

于 2013-07-23T01:16:00.013 に答える