なPostgresいるときに始まりで接続autocommitモードになっていますか?
-
21-09-2019 - |
質問
ようにしているの解の為'にいるときはPostgres(psycopg)接続します。ということかも新鮮なの接続設定し、その分離レベルをISOLATION_LEVEL_AUTOCOMMIT、このSQLを直接を使用せず、カーソルを開始/ロールバックの方法として行;なんかいこ):
INSERT A
INSERT B
BEGIN
INSERT C
INSERT D
ROLLBACK
のように挿入しますC。
は為は純粋に内部設定psycopgの影響がどのような問題が始まる?その場合、上記のSQLはunafected;に挿入します&Bてどう行われ、C&Dの実行の取引により、圧延ます。どの分離レベルでの取引に走るのでしょうか?
または為実際の設定は、接続です。その場合、どのような影響を与えの取り扱います。では無視され、オーバーライドの為の設定が実際に始動します。どの分離レベルでの取引に走るのでしょうか?
るのは僕が完全には何でしょうか?
解決
Autocommitモードとそれぞれの暗黙のうちに始まり終了する取引はない。
お場合、autocommitは:
- 顧客は暗黙的に開始のお取引の決
- の
BEGIN
警告が表示されていると言うの取引が始まってい - の
ROLLBACK
はしていないものとして結
時の為には、 c
や d
巻いています。
ご注意 PostgreSQL
にしてい AUTOCOMMIT
行動から 8.0
:すべての為の特長依存します。
他のヒント
デフォルトでは、PostgreSQLは各ステートメントはトランザクションとして扱われることを意味し、上の自動コミットを持っています。あなたが明示的にあなたの例のように、トランザクションを開始するよう指示した場合、これらのアイテムは、新しいトランザクションである。
あなたの例では、A及びBがコミットされる、C及びDがロールバックされることになる。
オートコミットがpsycopgである場合には、あなたのためだけにトランザクションを管理しようとすることなく、PostgreSQLバックエンドにすべてを送信します。あなたはBEGIN / COMMIT / ROLLBACKその後、すべての.execute()の呼び出しを使用しない場合は、すぐに実行して取り組んでいます。あなたは、BEGIN / COMMIT / ROLLBACKコマンドを発行することにより、独自のトランザクション管理を行うことができます。明らかに、自動コミット・モードでは、あなたはまっすぐにバックエンドに)conn.commit()またはconn.rollback()psycopgは、トランザクションを追跡することが、ただ何も送信していないので、あなたが(.executeを呼び出すことはできません。
A及びBがコミットされるであろうあなたの例では、CおよびDがロールバックされることになる。