
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ランキング
-
csvデータをPostgreSQLにインポ...
-
sqlにて0無しの月をフォーマッ...
-
PostgreSQLの標準文字コードをS...
-
windows版postgresql 異なるバ...
-
odbc接続処理が遅い
-
Oracle 10gがインストール出来...
-
Oracle9iを再インストールす...
-
booleanデータのcsv出力形式
-
リスナーが起動しません
-
Oracle RacにおけるSSH接続設定...
-
Access フォーム「使用可能」...
-
PostgreSQLで"pg_dumpall -f da...
-
Windows10 バージョン1909がイ...
-
postgresql-7.3.11のconfigre時...
-
Postgresqlのインストーラーに...
-
PostgreSQLをC言語でアクセスし...
-
PostgreSQLの管理ツール
-
pgAdminIIIアンインストールに...
-
MySQLがインストールできない
-
postegresSQLのパスワード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgresqlでのトランザクショ...
-
postgresql のフルバキュームみ...
-
JDBCのバグ?それともプログラ...
-
PostgreSQLのアンインストール...
-
JDBCで配列を使ったSQL文(INSE...
-
Postgresの対応OSは?
-
sqlにて0無しの月をフォーマッ...
-
SQLについてです
-
csvデータをPostgreSQLにコピー
-
ロゴのライセンス
-
PostgreSGLをインストールできない
-
csvデータをPostgreSQLにインポ...
-
pgAdminIIIでのリストア
-
マルチコアを使ってくれない
-
データベースクラスタの変更
-
postgresqlの接続ポート5432か...
-
windows版postgresql 異なるバ...
-
PostgreSQLで集約関数をネスト...
-
Windows10でQuickTimeがインス...
-
Access フォーム「使用可能」...
おすすめ情報