私はPostgreSQLのトランザクションをMSSQLと比較して頭を内包しています。いくつかの更新コマンドをテストしてから、SELECT
クエリをUPDATE
コマンドの間に振りかざして、結果が期待どおりであることを確認して戻したいと思います。ここで私は何をしようとしているの単純化した例です。PostgreSQLトランザクション内のSELECTクエリはROLLBACKの場合でもデータをコミットします
BEGIN;
UPDATE my_table SET int_column = 1 WHERE id = 1;
-- i want to check that the column has been set to 1
SELECT * FROM int_column WHERE id = 1;
-- i want to rollback the updates while testing
ROLLBACK;
私に混乱して何がSELECT
クエリがさえ最後のステートメントとしてROLLBACK
で、更新をコミットしているように見えるということです。 SELECT
を削除すると、ロールバックにより予期したとおりに更新が行われなくなりますが、実際には列が更新されます。私はMSSQLのSELECT
クエリがこの問題なしでトランザクション内で使用できるので、ここで何かが欠けているはずです。
検索やPostgreSQL Transaction Documentationでこれに関する詳細が見つかりませんでした。
どのSQLクライアントを使用していますか?自動コミットを有効にしましたか? –
@a_horse_with_no_name私はPosticoと呼ばれるものを使用していますが、自動コミットを参照するオプションは見つかりません –
「BEGIN ... ROLLBACK」トランザクションコントロールをサポートしていない可能性があります。あなたの例は 'psql'で正しく動作します –