• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:postgresqlでのトランザクションについて)

PostgreSQLでのトランザクションについて

このQ&Aのポイント
  • PostgreSQLでのトランザクションについてエラーが発生しました
  • トランザクションの処理でWARNING "進行中のトランザクションがありません"のエラーが発生
  • drop文の実行時に明示的なトランザクションの処理が必要かどうかについて質問

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

PostgreSQLではOracleと異なりDDLで自動コミットされないので、基本的にはBEGINとCOMMIT(またはROLLBACK)で囲むのが基本です。 今回のWARNINGは、すでにトランザクションが終了しているのにCOMMIT/ROLLBACKを発行したために発生しています。アプリケーションのコードパスでBEGINとCOMMIT/ROLLBACKが1:1対応になっていない箇所(ROLLBACKしているのにCOMMITもしている、など)があるのではないでしょうか? また、今回のケースではテーブルが存在しないことが通常ケースとしてあり得るということのようなので、DROP TABLE IF EXISTS <table name>;というDDLを使うのが良いと思います。 ちなみに、PostgreSQLではトランザクション開始後にエラーが発生してもトランザクションは終了せずabort状態に遷移します。この状態では、COMMIT/ROLLBACK以外の全てのSQLがエラーになります。COMMIT/ROLLBACKを実行すると、どちらでもトランザクションはROLLBACKされて終了します。 https://www.postgresql.jp/document/9.3/html/tutorial-transactions.html

参考URL:
https://www.postgresql.jp/document/9.3/html/sql-droptable.html
jg1wjz
質問者

お礼

mino-motsuさん、ありがとうございます! もう一度、1:1対応になっているか確認してみます。 また、 DROP TABLE IF EXISTS <table name>; というSQLも教えていただき、大変助かりました。 過去に、sqlで存在確認をしようといろいろ試したのですが、できなかった履歴がありました。(当然、上記とは違ったsqlがコメントになっていました) 早速組み入れてみます。 ありがとうございました。

関連するQ&A