2

COPY table_name FROM STDIN を使用してデータをインポートしています。これは非常に効率的ですが、重複キーの違反があると、手順全体が停止します。とにかくこの周りにはありますか?

postgresql が警告を出して残りのデータをコピーしないのはなぜですか?

例は次のとおりです。

 select * from "Demo1";
 Id | Name  | Age 
 ---+-------+-----
  1 | abc   |  20
  2 | def   |  22


COPY "Demo1" from STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 3    pqr     25
>> 4    xyz     26
>> 5    abc     21
>> \.

ERROR:  duplicate key value violates unique constraint "Demo1_Name_key"
DETAIL:  Key ("Name")=(abc) already exists.
CONTEXT:  COPY Demo1, line 3

ここで「名前」フィールドには一意の制約があります。文字列「abc」はすでにテーブルに存在するためです。そのプロセス全体を無視します。

4

1 に答える 1

1

次の 2 つの方法のいずれかを使用して、データをインポートできます。

  1. COPY FROM(一時テーブルへ)。主キーの失敗を取り除き、有効なデータのみをインポートします。
  2. FDW(この例のように)を使用します。Foreign-Data-Wrappers はライブ フィード / 非常に大きなデータ セットに推奨されます。これは、一時コピーを作成する必要がなく (エラー / 列のスキップ / 行のスキップなど)、SELECT任意の列をスキップするステートメントを直接実行できるためです /行とINSERT宛先テーブルに。
于 2016-02-04T01:02:39.293 に答える