
postgresqlで、「WARNING 進行中のトランザクションがありません」のエラーが出てしまいました。
これはそのままの意味だと思うのですが
直す方法がわかりません。
ワーニングなので、、、といいたいところですが、そうもいかず。
apのログで、トランザクション関係の辺りを見ましたところ、
トランザクションを開始し、
TABLEをDROPしようとしましたが、存在しなかった(ようだ)。
(PQexecがエラーでリターン)
存在しないけれど、commit してトランザクションを終わらせている。
のが原因かなと思いました。
なので、PQexec()がエラーの場合はcommitしなければいいのかと
はずしましたが結果は同じでした。
トランザクションが無いのだからrollbackもいらないですよね。
そこで質問ですが
drop文、1ステップのSQL実行も明示的にトランザクションの処理をしたほうがいいのでしょうか?
このワーニングは通常のトランザクションの処理の中で、どういう時にでるのでしょうか?
oracleとpostgresqlの明示的・暗黙的な制御に戸惑っています。
(oracleからpostgresqlに移行することになりました)
叱咤でも何でもかまいませんので、アドバイスよろしくお願いいたします。
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/tuto …
参考URL:https://www.postgresql.jp/document/9.3/html/sql- …
mino-motsuさん、ありがとうございます!
もう一度、1:1対応になっているか確認してみます。
また、
DROP TABLE IF EXISTS <table name>;
というSQLも教えていただき、大変助かりました。
過去に、sqlで存在確認をしようといろいろ試したのですが、できなかった履歴がありました。(当然、上記とは違ったsqlがコメントになっていました)
早速組み入れてみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Illustrator(イラストレーター) イラストレーターが買えない 1 2022/08/25 13:23
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PostgreSQL PostgreSQLドライバの登録。 MavenプロジェクトからPostgreSQLへ接続をするため 1 2022/09/26 12:30
- PostgreSQL SQLでUPSERTを一度に複数行やる方法 3 2022/03/25 15:17
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
- その他(メールソフト・メールサービス) サンダーバードメール移動しない 1 2023/05/13 11:21
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで縦のカラムデータを...
-
自治会総会の成立要件について
-
Windows10がインストールできま...
-
SQLでUPSERTを一度に複数行やる...
-
plgファイルの開き方
-
PostgreSQLとmysqlはどちらを選...
-
レンタルサーバーのPostgreSQL...
-
postgresqlでのトランザクショ...
-
直近2年度連続で減少していない...
-
列が存在しないと言われる
-
postgreSQLのint型は桁数指定が...
-
postgresql についてです
-
PostgreSQL14.6のSSL対応について
-
PuTTyにログインまでは出来たの...
-
PostgreSqlでFunctionの作成に...
-
ウィンドウズ10へアップロー...
-
PostgresSQLの環境設定について
-
mplabの事です。 2年くらい前に...
-
Windows10でQuickTimeがインス...
-
select文の書き方「半角カナ+...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自治会総会の成立要件について
-
postgresql についてです
-
postgreSQLのint型は桁数指定が...
-
SQLでUPSERTを一度に複数行やる...
-
plgファイルの開き方
-
SQLにて指定日付より前、かつ最...
-
select文の書き方「半角カナ+...
-
エクセルで縦のカラムデータを...
-
PostgreSqlでFunctionの作成に...
-
postgresqlでのトランザクショ...
-
新規作成したPostgresqlデータ...
-
select文の書き方で分からない...
-
列が存在しないと言われる
-
PostgreSQLについて教えてくだ...
-
shellからpostgresqlへの変数の...
-
Windows10でQuickTimeがインス...
-
Postgreのupdateコマンドでエラー
-
bashスクリプトでpostgreSQLの...
-
Windows10がインストールできま...
-
PostgresSQLの環境設定について
おすすめ情報