3

次の単純な SQL クエリを想定します。

INSERT INTO table (col1,col2) VALUES (val1,val2),(val3,val4),(val5,val6);

val3の無効な値としましょうcol1。これにより、psql は INSERT コマンド全体を中止します - 挿入も挿入(val1,val2)もしません(val5,val6)

(val3,val4)postgresql にこのエラーを無視させて、ペアを挿入せずに(val1,val2)and を続行させることはでき(val5,val6)ますか?

パートナーから毎日データベース ダンプをテキスト ファイルで受け取っています (変更できません)。これを使用してコピーを作成しています。彼の巨大な INSERT クエリは、次のようなエラーを引き起こすことがあります。

ERROR:  invalid byte sequence for encoding "UTF8": 0x00

...これらの値の1つが間違っているため、30000以上の値全体がテーブルに挿入されません。

4

1 に答える 1

1

入力ファイルを処理するアプリケーションは、各 INSERT ステートメントをセーブポイントでラップする必要があります。挿入が失敗した場合は、最後のセーブポイントにロールバックできます。何かのようなもの:

(疑似コード)

foreach ライン
  セーブポイントを設定
  試す
    現在の行を挿入
  キャッチ
    セーブポイントへのロールバック
  終わり
エンドループ
専念
于 2010-10-06T19:34:47.770 に答える