私はPythonでpsycopg2を使用していますが、私の質問はDBMSに依存しません(DBMSがトランザクションをサポートしている限り):
私はデータベーステーブルにレコードを挿入するPythonプログラムを書いています。挿入されるレコードの数は100万を超えています。各挿入ステートメントでコミットを実行するようにコードを記述したとき、プログラムが遅すぎました。したがって、5000レコードごとにコミットを実行するようにコードを変更しましたが、速度の違いは非常に大きかったです。
私の問題は、ある時点でレコードの挿入時に例外が発生し(一部の整合性チェックが失敗する)、例外が発生した最後のコマンドを除いて、その時点まで変更をコミットし、残りを続行したいということです。私の挿入ステートメントの。
私はこれを達成する方法を見つけていません。私が達成した唯一のことは、例外をキャプチャし、トランザクションをロールバックして、保留中の挿入ステートメントを失うその時点から続行することでした。また、カーソルオブジェクトと接続オブジェクトも運が悪かったので(ディープ)コピーしてみました。
ステートメントをロールバックして再作成/再実行することなく、この機能を直接または間接的に実現する方法はありますか?
よろしくお願いします、
ジョージ。