- ベストアンサー
Oracle→Postgresql 移行について
あるWebアプリのDBをOracleからPostgresqlへ移行中なのですが、 トランザクション処理でエラーが発生します。 エラーコード:25006 メッセージ:リードオンリーのトランザクションでは UPDATE を実行できません Oracleでは正常にトランザクションが処理されてPostgresqlではできないということがあるのでしょうか。 類似の問題に経験のある方はご教授をお願い致します。 ちなみに、OracleとPostgresqlのバージョンは下記の通りです。 Oracle:11g Postgresql:9.2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 > default_transaction_read_onlyをoffで設定してみたのですが、動作は変わりませんでした。 postgresql.conf ファイルに設定を追加したという事でしょうか? 何も設定していなければ、default_transaction_read_only は off になるはずです。 また、ある場所で off に設定しても、それより優先順位の高い場所で on に設定していれば on になります。 http://www.postgresql.jp/document/9.2/html/config-setting.html ですので、先の回答の意図は、 default_transaction_read_only を on に設定している箇所がどこかにないか確認して、もし有ったら除去した方が良いですよ、ということでした。 もちろん、問題のトランザクションが明示的に READ ONLY にされていてもダメですので、念の為にそれも確認した方が良いかも知れません。 確認の手順としては↓の様になるでしょうか。 1. そのトランザクションの開始時に READ ONLY が指定されていないか確認し、されていたらそれを除去する。 2. そのトランザクション中に SET TRANSACTION で READ ONLY が設定されていないか確認し、されていたらそれを除去する。 3. その接続中に SET コマンドで default_transaction_read_only が on に設定されていないか確認し、されていたらそれを除去する。 4. 下記の全ての箇所について、パラメータ default_transaction_read_only が設定されていないか確認し、されていたらそれを除去する。 a. postgresql.conf ファイル b. 環境変数 PGOPTIONS c. 起動時のコマンドラインオプション (コマンド postgres または postmaster) 5. それでもダメなら、そのトランザクションの開始時に READ WRITE を指定してみる。 例) BEGIN READ WRITE;
その他の回答 (1)
- root139
- ベストアンサー率60% (488/809)
エラーメッセージからすると、読込み専用トランザクションの中で書込みをしようとしているみたいですね。 postgresql.conf ファイルや環境変数などで default_transaction_read_only を有効にしていないでしょうか? Oracleで正常に処理されていたのなら、READ ONLY を指定して BEGIN や START TRANSACTION を行っているということは無いと思いますが。 http://www.postgresql.jp/document/9.2/html/runtime-config-client.html#GUC-DEFAULT-TRANSACTION-READ-ONLY http://www.postgresql.jp/document/9.2/html/config-setting.html http://www.postgresql.jp/document/9.2/html/sql-begin.html http://www.postgresql.jp/document/9.2/html/sql-start-transaction.html
お礼
root139様 レスありがとうございます。 default_transaction_read_onlyをoffで設定してみたのですが、動作は変わりませんでした。 他の方法を探してみます。
お礼
root139様 ご丁寧な回答ありがとうございます。 default_transaction_read_onlyはコメントアウトされていたのですが、明示的にOffを設定したという意味です。 また、Connectionの作成の所でReadOnlyを設定している箇所があったのでそちらが原因のようでした。 ※Oracleでは問題なく動作しているのに・・・・ この辺りを見直してみます、ありがとうございました。