DBAtlas · データベース運用アトラス

ERR DISCARD without MULTI: DISCARD without MULTI(MULTI なしの DISCARD)

Redis

意味

MULTI ブロックが開いていない状態で DISCARD が送信された。DISCARD は進行中のトランザクションを取り消すためだけに使用され、取り消す対象がない場合にこのエラーを返す。

原因

MULTI なしで、またはトランザクションが既に EXEC/DISCARD で閉じられた後に再度 DISCARD を呼び出した、エラー処理コードでの無条件の DISCARD 呼出し、または接続状態が想定と異なる (プールから取得した接続で MULTI が開いていない)。

対処方法

MULTI が実際に開いている場合にのみ DISCARD を呼び出し、コード内でトランザクション状態を追跡する。エラーハンドラでは DISCARD を呼ぶ前にトランザクションが開いているか確認する。状態を自動管理するライブラリのトランザクションラッパーを使用する。コネクションプールでクリーンな状態を保証する。

DBAtlas で開く →

同じデータベースの他の項目