- 締切済み
PostgreSQL LOCK TABLE
はじめまして、小澤と申します。 PostgreSQL はあまり使う機会が無かったので、 実務期間数か月の初心者です。 数年前に作成されたサイトのメンテナンスをしております。 本番環境の DB は、更新することが出来ないので、 ローカルに開発環境を作って、修正作業を行っています。 本番環境と開発環境の、PostgreSQL のバージョンの違いによって 困っています。 PHP で、「LOCK TABLE ~ 」という処理があるのですが、 本番環境は問題なく実行できますが、開発環境で、下記のエラーがでます。 SQL エラー: ERROR: LOCK TABLEはトランザクションブロック内でのみ使用できます LOCK TABLE をトランザクションの BEGIN と COMMIT の中に 入れなさい、ということおt思います。 本番環境は、Linux バージョンは 7.3.4 開発環境の、Windows バージョンは 8.4.4 7.3.4 の頃には、トランザクション処理が無かったのか、 LOCK TABLE との関係が定義されてなかったのかもしれません。 開発環境の PostgreSQL のバージョンを 7.3.4 にしようと思い、 探したのですが、Windows 版はもう無いようです。 下記のことを教えて下さい。 1.開発環境の PostgreSQL の設定で、このエラーを出ないようにする 方法はないでしょうか。 2.Windows 版の PostgreSQL のバージョンを 7.3.4 が、 どこかにないでしょうか。 尚、ソースにトランザクション処理を追加するという方法も考えましたが、 修正箇所が多いので、難しいです。 メーリングリストにも出してます。マルチキャストですみません。 以上、宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taco0603
- ベストアンサー率63% (21/33)
はじめまして。 ご質問の回答ではありませんが、 >本番環境は、Linux バージョンは 7.3.4 >開発環境の、Windows バージョンは 8.4.4 開発環境が中途半端に新しく?、どういう意図でヴァージョン違い、OSも異なるもので開発されているのか読み取れませんがこれでは有効なテストにならないと思います。 ヴァージョンやOS差異によるバグや制限をテスト時に拾うことができませんよ。 本来であれば本番と全く同じハード・ソフト環境を用意すべきでしょうが、少なくともVmware Playerなどの仮想環境を用意してデータベースは本番と同じ環境にすできではないかと。
- Siegrune
- ベストアンサー率35% (316/895)
1. PostgreSQLって、デフォルトで自動コミットされてしまう設定だったと思うけど。 SET AUTOCOMMIT で調べてみると開発環境と本番環境で違っているのでは? と疑問に思ってしまいます。 2. PostgreSQLの7系でWindows版ってあったかな? (あったかもしれません。他の回答を当たってください。 私は、下のような話だったので手出ししなかったというだけですが。) (Wikiからの引用で悪いけど) Windowsにおいては、バージョン7.4以前はCygwinを必要としたが、バージョン8.0以降はネイティブで動作する。 (引用元) http://ja.wikipedia.org/wiki/PostgreSQL#.E3.83.97.E3.83.A9.E3.83.83.E3.83.88.E3.83.95.E3.82.A9.E3.83.BC.E3.83.A0 ついでに、Cygwinってなに? (これもWikiから) Cygwin (シグウィン) は、Microsoft Windowsオペレーティングシステム上で動作するUNIXライクな環境の一つである。フリーソフトウェアである。 (引用元) http://ja.wikipedia.org/wiki/Cygwin
お礼
ありがとう、ございました。 質問した件は、Windows 用の PostgreSQL を バージョンは 8.2.2 にしたら、 エラーが出なくなりましたので、解決とさせていただきます。 Cygwin もやってmたいと思います。
補足
私、Linux サーバーのことは殆んど分かりません。 Windows の環境で開発し、Linux にアップして運用ということをしています。 Vmware Player を調べ、使ってみたいと思います。 尚、質問した件は、Windows 用の PostgreSQL を バージョンは 8.2.2 にしたら、 エラーが出なくなりましたので、解決とさせていただきます・