以下のような感じでPerlでPostgreSQLからデータを取得しようとしています。
テスト用の環境ではうまく動いていたのですが、いざ本番用環境に移行すると何故か結果が取得できません。
my $command = 'psql -h 255.255.255.255 -U username -c "select * from test" |';
open( IN, $command )
while( <IN> ) {
$result .= $_;
}
close( IN );
テスト環境ではデータが取得できていたので、プログラムの構文的には間違っていないと思うのですが、
PerlやPostgreSQL、サーバー等の環境設定について経験が浅い為、原因がさっぱり分かりません。
なお、2行目のopenには成功しているようですが、whileループ中には入っていないようです。
どのようにして原因の切り分けが出来るでしょうか?
また、解決にはどのようにすれば良いでしょうか?
※補足要求をいただければ、比較的早く補足できると思いますので、
必要な情報があれば合わせてご指示ください。
※原因の切り分けがちゃんと出来ていないため、カテゴリが違う可能性があります。
ご容赦ください。
No.4ベストアンサー
- 回答日時:
やっとわかってきました。
最終的にはブラウザに出力したいのですね。
私の推測では取得できてますね・・・。多分。
先ほどのデバッグライトを少し書き直して見ましょう。
print STDERR "DEBUG::[[$command]]\n"
open( IN, $command ) || die "OPEN ERROR!!\n";
while( <IN> ) {
$result .= $_;
print STDERR "$result\n";
}
としてみてください。
CGI実行後、Webサーバ(Apacheかな?)のerror_logにデバッグライトがはかれます。
出力結果を教えて下さい。
また、別のエラーがはかれていた場合も教えてください。
>tail -f error_log
とするとリアルタイムにはかれるログがわかります。
この回答への補足
DEBUG::[[/usr/local/pgsql/bin/psql -h 255.255.255.255 -U username -c "select * from test'" |]]
Password:
psql: fe_sendauth: no password supplied
となってました・・
パスワードの入力を求められてますね・・
No.5
- 回答日時:
pg_hba.confのUSER列でユーザが指定されているとパスワードを聞いてきます。
ここをallとするとパスワードを聞いてこなくなります。
尚、pg_hba.confを書き換えた場合PostgreSQLの再起動が必要となります。
いろいろとありがとうございました。
パスワードについては.pgpassというファイルを使用する方法で行こうかと思います。
調べてみるとテストサーバーではこの方法になってるらしい。
でも本番環境もこの方法になってるようなのですが、効いてないようで・・・
この件については趣旨が変わってくるので別に質問させていただきます。
No.3
- 回答日時:
No1です。
OSの情報は下記コマンドでわかります。
> uname -a
0)print "DEBUG::[[$command]]\n"の結果はどのように表示されましたか??
下記の意味がよくわからないのでもう少しわかりやすく説明していただけますか?
>また色々試している中で、発生した現象ですが、
>このSQLコマンドは通常ブラウザからコールされるの
>で、その形でテストしていますが、
>コマンドライン上からこのCGIファイルを実行すると
>(perl test.cgi)
>結果がちゃんと取れました・・
1)テスト環境と本番環境では実行の仕方が違うのですか??どこからどこに実行したのかを教えてください。
(詳細に!!)
この回答への補足
本番サーバー
Linux [サーバー名] 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386 GNU/Linux
本番DB
Linux [サーバー名].in.[ドメイン] 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386 GNU/Linux
テストサーバー
Linux [サーバー名] 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386 GNU/Linux
テストDB
Linux [サーバー名] 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386 GNU/Linux
※本番DBだけ他とサーバー名の出方が違うのですが何か関係ありますか?
テストと本番では実行しているサーバー、DBが違うだけで実行の仕方は同じです。(少なくとも同じと認識しています)
先ほどのコマンドは CGIファイルに記述していて、DBからの取得結果をブラウザ上に表示するようになっています。
しかし結果が取得できない為、close(IN)の次の行にprint $result;としていました。
この時、ブラウザから実行すると何も表示されません。(ソース表示で確認)
一方サーバーで perl test.cgiとして実行した場合、DBからの取得結果が正しく表示できました。(こちらの方法は本番でのみ確認)
No.2
- 回答日時:
No1です。
0)せめてにOSやPostgreSQLやPerlのバージョンはわかりませんか?
1)本番環境とテスト環境は別サーバマシンですか?
2)本番環境のPostgreSQLのpostgresql.confで
tcpip_socket = true
となっていますか?
4)どちらの環境でも
********************************************
my $command = 'psql -h 255.255.255.255 -U username -c "select * from test" |';
open( IN, $command )
while( <IN> ) {
$result .= $_;
}
close( IN );
********************************************
を実行したのでしょうか?
print "DEBUG::[[$command]]\n"
open( IN, $command ) || die "OPEN ERROR!!\n";
としてデバッグしたらどうでしょうか?
この回答への補足
>OSやPostgreSQLやPerlのバージョンはわかりませんか?
OSはUNIXということしか分かりません。(というかどこを見ると分かるのか・・)
Perlは v5.8.0 (perl -v にて確認)
PostgreSQLは 7.4.7 (psql --version にて確認)
> 本番環境とテスト環境は別サーバマシンですか?
別のマシンです。
またDBもそれぞれ、別のマシンにあります。
> 本番環境のPostgreSQLのpostgresql.confで
tcpip_socket = trueとなってるようです。
>どちらの環境でも
実行しています。
結果として、テスト用では結果が取得できたが、本番用では取得できませんでした。
テスト用と本番用で変わっているのはDBのIPアドレスだけです。
> print "DEBUG::[[$command]]\n"
> open( IN, $command ) || die "OPEN ERROR!!\n";
やはり結果は取得できません。
またOPEN ERRORは出力されていません。
また色々試している中で、発生した現象ですが、
このSQLコマンドは通常ブラウザからコールされるので、その形でテストしていますが、
コマンドライン上からこのCGIファイルを実行すると(perl test.cgi)
結果がちゃんと取れました・・
これで原因が分かったわけではないですが、参考になれば。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経済学 因子分析における因子得点の解釈について 1 2022/12/10 02:05
- Visual Basic(VBA) VBAのエラーについて 2 2023/08/02 17:46
- FTTH・光回線 AU光回線の速度が出ません 2 2022/07/30 16:05
- その他(悩み相談・人生相談) 人生が苦しい、そんな時どうすれば、読むと良い本、映画など教えてください 5 2022/05/29 10:42
- 書類選考・エントリーシート 【急ぎです】指定校推薦の志望理由書の添削お願いしたいです! 商学部で1600字中1595字です 志望 1 2023/08/24 02:54
- 介護福祉士・ケアマネージャー・社会福祉士 フルタイム働きながら(デイサービス)無理なく、実務者研修を取得する方法。 2 2023/03/25 12:15
- その他(教育・科学・学問) 境界知能の人でも学力は上がりますか?? そもそもIQが低い原因は親の教育の問題だった場合は可能性はあ 3 2022/06/22 13:47
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- サーバー Webサイト構築フリーランスの案件受注について 1 2022/03/27 18:16
- 大学・短大 〈至急〉関西大学社会安全学部か立命館大学政策科学部のどちらに行くかとても迷っています。 3 2023/02/11 21:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
P.Cのシングルチューナーとダブ...
-
テキストファイルで提出とは?
-
Perlで、「が」を、「...
-
Perl LINE(チャット) 仕組み
-
Perlのエラーについてご教授く...
-
ファイルアイコンの左下に緑の□...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlソースコードをコンパイル...
-
プロシージャの戻り値を取得す...
-
Perlで環境変数を設定するには
-
systemの引数の中括弧
-
perlでコマンドプロンプト実行
-
system関数を使用してJava実行...
-
Cygwin上でperlスクリプトの実行
-
Perlのexitについて
-
PERLからcshellを実行したいの...
-
Perlスクリプトが実行できない...
-
pp (Perl Packager) で require...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
例外処理のフローチャートの記...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
「デバイスは PRN を初期化でき...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
Excel VBA 『Call』で呼び出す...
おすすめ情報