
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlにて0無しの月をフォーマッ...
-
PostgreSQLを完全に削除出来ない
-
windows版postgresql 異なるバ...
-
Oracle-Perlの接続
-
Windows10がインストールできま...
-
odbc接続処理が遅い
-
MySQLがインストールできない
-
Oracle9iを再インストールす...
-
Oracle RacにおけるSSH接続設定...
-
autovacuumがメモリ負荷に!
-
postgresqlの国際化言語のサポ...
-
Oracle 10gがインストール出来...
-
Npgsql.dllをバージョン指定で...
-
ORA-12571 パケット・ライター障害
-
initdb: command not find...
-
64bitサーバにOracleが作成でき...
-
postgreSQLに複数行(改行され...
-
vacuum処理を高速化させたい
-
SQL ExpressエディションのCPU...
-
日本語入力について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgresqlでのトランザクショ...
-
postgresql のフルバキュームみ...
-
PostgreSQLの基礎的な文法
-
sqlにて0無しの月をフォーマッ...
-
JDBCで配列を使ったSQL文(INSE...
-
PostgreSQLのアンインストール...
-
csvデータをPostgreSQLにインポ...
-
postgresqlの接続ポート5432か...
-
windows版postgresql 異なるバ...
-
MySQLとPostgresの同時使用
-
Oracle RacにおけるSSH接続設定...
-
odbc接続処理が遅い
-
Access フォーム「使用可能」...
-
PostgreSQLで集約関数をネスト...
-
ORA-12571 パケット・ライター障害
-
PostgreSQLの標準文字コードをS...
-
Oracle9iを再インストールす...
-
Oracle 10gがインストール出来...
-
Windows10がインストールできま...
-
大至急!mdfファイルの中身を見...
おすすめ情報