1

テーブルでトリガーを使用して、STDIN からの COPY ステートメントにあるがターゲット テーブルにない列を「無視」できるかどうか疑問に思っています。質問の文言/構文が間違っている場合は申し訳ありませんが、ここに私が言おうとしていることの説明があります。私はトリガーが初めてなので、アドバイスが役に立ちます。

PostGIS Shapefile インポーターを使用して、シェープファイルを PostgreSQL データベースの空間テーブルにコピーしています。

これにより、次のようなシェープファイル内のすべてのフィールドを含む COPY ステートメントが作成されます。

COPY "public"."stations" ("column1","column2","column3","column4", geom) FROM stdin;

column1 と column2 はファイルに含まれていますが、ターゲット テーブルには含まれていないため、COPY は失敗します。

次と同じ結果になる何かを作成するトリガーを作成する方法はありますか?

COPY "public"."stations" ("column3","column4", geom) FROM stdin;
4

1 に答える 1

2

いいえ、入力ファイルに存在する列をスキップすることはできません。これは、トリガーが呼び出される前にエラーになります。また、ルールも使用できません。マニュアルを引用します

COPY FROM は、すべてのトリガーを呼び出し、宛先テーブルの制約をチェックします。ただし、ルールは呼び出されません。

ファイルを編集するか、一時的なステージング テーブルを使用できます。

  1. COPY一致する列を持つ一時テーブルに。

  2. INSERT目的の列を最終的なターゲット テーブルに書き込むために使用します。または、より高度な問題については、SQL DDL コマンドの全範囲を書き込みます。

于 2012-06-14T02:36:09.487 に答える