トランザクション

CSVファイルを取り込んでデータベースに登録するプログラムを書いていたのだが、「一つ登録エラーが発生するとそれ以降の全データがエラーとして帰ってくる」理由が分からず、プログラムを点検していた。
結局理由が分からなかったので、データベース接続部分でエラーを拾ってみると・・・「このトランザクションはabortされているのでコマンドは無視された」というエラーだった。・・・無駄な努力をしてしまった(笑)
何度もCSVを取り込み直すのは面倒だと思われるので、最初にトランザクションを開始して一つでもエラーがあったらいちばん最後にロールバックするようにプログラムを書いていたのだが、エラーを見つける度にロールバックしてトランザクションを再開しないと、「エラーが発生するデータの一覧」は取得できないらしい。
データベースはPostgresだが、この挙動はSQLサーバー共通なのかPostgresの仕様なのか調べておく必要がありそうだ。