• ベストアンサー

データベース接続について

いつもお世話になっております。 PHP4.2でのpostgresqlへのネットワーク経由での接続なのですが、現在私の環境が apache 1.3 php4.2 OS WindowsXPです。 ネットワーク経由(LAN)にてLinuxサーバーのpostgresql(Ver7)へアクセスしようとしているのですが、 Warning: pg_connect() unable to connect to PostgreSQL server: FATAL 1: user "SYSTEM" does not exist in ↑上記のようなエラーがかえってきてしまいます。 ユーザー"system"をデータベースユーザーへ登録してgrant文で権限を与えたのですがうまくいきません。 どなたか、識者のかた、解決の糸口でもかまいませんのでアドバイスいただけないでしょうか? カテゴリもOSかデータベースか迷いましたが、こちらのほうが経験者が多いと思い投稿させていただきました。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kakkey
  • ベストアンサー率44% (62/138)
回答No.4

エラーメッセージから想像するに、 ・(A)LinuxサーバーではPostgreSQLが動作している。 ・(B)WinXPでApacheが動作している。 ・データベースへ接続するPHPスクリプトを書いて(B)に載せて動かしてみたけどエラーが出た。 ・(A)と(B)は別のPC。 といった感じでしょうか? PostgreSQLで接続エラーが出る場合は次のポイントをチェックしてみてください。 ・PostgreSQLに接続するユーザーの登録をしている?  ここでのユーザーとは、Web接続だからApacheが名乗るユーザー名です。  Linuxユーザーにも登録されているか?もあると思う。  (ApacheがPostgreSQLに接続しに行く訳ですからね。)  →Apacheのhttpd.conf参照(Win版もコレです?) ・PostgreSQLで接続したい各テーブルにGRANT命令で利用権限を設定している?  →各テーブルに権限を追加している?  →追加コマンドは正しく登録されている? ・PostgreSQLの設定ファイルに、Webサーバーの接続許可を含めている?  →Linux上のpg_hba.confファイルが適切に記述している? ・PHPスクリプトで、希望するデータベースに接続する記述が正しく書けているか?  $** = pg_connect("++++++++++");  →"+++++"の中身が問題。 → 要チェック。 手っ取り早いのは、Apacheの動作ユーザーでLinuxにログインして、実際にpsqlで コンソールを開いて希望するSQL命令を動かしてみることです。 それが出来るなら、問題はApache-PostgreSQL間の接続に関する部分と、PHPスクリプト の記述に関する部分に絞られるでしょう。 この様に手動で一連の動作を実際に確認していけば、どこに問題があるのか段々と 絞り込まれてくると思います。壁に当たったら、動作を分解して実地検証してみる のが解決の近道ですよ~。 あと、些細な事ですが(多分ご存知だと思うので、気を悪くしないで下さい。) PostgreSQLが動いているLinuxにとって、【system】と【SYSTEM】は別ユーザーです。 大文字、小文字の区別はLinuxであれば他の項目でも効いてきますから、念の為これも 再確認してみましょう。 では頑張ってバグ取りしてみてください。

その他の回答 (4)

  • Sincha
  • ベストアンサー率0% (0/3)
回答No.5

私も同じような環境でデータベース構築をしています。WinNTですが・・・。 まったく同じエラーが前出ていましたが、 create user SYSTEM としたら接続できるようになりました。この場合、大文字で登録します。 これで接続ができないようなら、まず、PHPでPostgreSQLが認識されているか再チェックが必要です。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

ごめんなさい。質問を良く読んでいませんでした(^^; > OS WindowsXPです これを読んでいませんでした。 Windowsでの開発はしたこと無いので、分かりません。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

> FATAL 1: user "SYSTEM" does not exist in このエラーは、"SYSTEM"と言うユーザーは存在しませんと言っています。 ここで、ユーザーについてですが、Linuxユーザーと、PostgreSQLユーザーは、全く別物です。 おそらく、SYSTEMと言うユーザーをLinuxユーザーとして登録はしていると思いますが、PostgreSQLユーザーとして登録していないのではないでしょうか? create userで、登録してみてください。

fichi
質問者

補足

回答ありがとうございます ご指摘のデータベースユーザーの登録は、問題なくできております。 クライアントのサービスとしてではなくユーザー名でapacheを起動して、データベースサーバーへ接続すると、問題ないのですが、apacheをサービスとして起動した場合は、上記のようなエラーが返ってきてしまいます。 サービスを任意のユーザー名で動かすことはXP上ではできないのでしょうか? ※一番は"SYSTEM"というユーザーがpostgresに接続できればよいのですが。

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

こんにちは。 接続しようとしているデータベース及びテーブル名は合っていますか?? telnet等で接続できますか??

fichi
質問者

補足

回答ありがとうございます。 どうしたらよいか、途方にくれておりました。 telnetでの接続は問題なくできます。 そしてOSがWin98SEにインストールされているapacheからも問題なく接続できているようです。 XPのせいなのでしょうか? また、サービスで起動するapacheのユーザー名などを変更することなどはできるのでしょうか?

関連するQ&A