環境はxp、apache2、php5、Postgresql8.2です。

ただ今PHPとPostgresqlの勉強をしています。

postgresに接続できなくて困っています。

<?php
$d_base = pg_connect("user='postgres' password=xxxx dbname='test'"); //データベースに接続
で、エラーになり
その内容は、

Warning: pg_connect() [function.pg-connect]:
Unable to connect to PostgreSQL server:
could not connect to server:
Connection refused (0000000000D/00000)
Is the server running on host "???"
and accepting TCP/IP connections on port 5432? in


です。

ご教示して頂けたら幸いです。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

接続できないトラブルの原因は大きく分けて以下の3つ


1.経路が繋がっていない。線が繋がっているように見えても、論理的に切断されている場合もある。
2.接続先(今回はPostgreSQL)が接続を受け付けていない。
3.接続元(今回はPHP5)が接続しにいく設定になっていない。
PHP君は「PostgreSQL君が接続を待ち受けていないよ」と言っている。なので、2番ではないかと考えられる。PHP側でpg_connectにhost=hogehogeを記述していないので正しいマシンに接続にいっていないという3番の可能性もあるにはあるんだけど。

見るべきはPostgreSQLの設定。とりあえず
postgresql.confを開いて、
listen_addresses = '*'
という風になっているか確認。無ければ次のいずれかに設定する。
listen_addresses='127.0.0.1'
listen_addresses='<マシンのIPアドレス>'
listen_addresses='*'
上から順番に安全だ。ただし、一番上はPHPとPostgreSQLが同じマシンで動作していなければいけない。

ところで、恐らくここで詰まったという事は、これが解決しても次の段階で詰まると思われる。上のpostgresql.confと同じ場所にあるであろうpg_hba.confもあわせて確認しておきたい。とりあえず設定例だけ掲載しておくので後は検索いただきたい。
host all all 127.0.0.1/32 password sameuser
    • good
    • 0
この回答へのお礼

ご返事有り難うございました。
早速試してみます。

お礼日時:2007/11/15 15:18

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qサーバに接続できません・・・

環境はxp、apache2、php5、Postgresql8.2です。

ただ今PHPとPostgresqlの勉強をしています。

Pgadmin3で
postgresサーバに接続しようとすると
次のようエラーが出て
接続することが出来ません。

「サーバに接続できませんでした
サーバはホスト"000.0.0.1"で稼働していますか?
また、ポート5432でTCP/IP接続を受け付けていますか?」

そのため、postgresをアンインストールして
インストールし直したところ
接続できるようになったのですが
新しいデータベースを作ろうとしたところ
また同じエラーが出て接続できなくなってしまいました。

ご教示して頂けたら幸いです。

Aベストアンサー

1台のPCを、サーバ&クライアントにするのですね?
PostgreSQLのサービスは、動いているのですね?
もし、動いていないなら、PostgreSQLのインストールフォルダの\data配下に、
pg_hba.conf
postgresql.conf
に、IPアドレスを指定している場所があるので、「127.0.0.1」以外になっていないか確認してください。
この二つのファイルは、pgAdminIIIで、メニューバーの「ファイル」から編集できます。

pgAdminIIIだけが繋がらないなら、サーバ名を選択した状態で、メニューバーの「編集」→「プロパティ」で、「アドレス」が「localhost」か「127.0.0.1」以外になっていないでしょうか?

QPHPでPostgresqlへアクセス

OSはFedoraCore3を使用しています。
PHP5で作成したプログラムでPostgresqlへアクセスするのですが,全く応答がありません。

ブラウザで表示後、ソースを見ると
<html><body></body></html>
としか出ません。
ということはpg_connect("host=****...")がエラーの原因と考えています。
上記のプログラムの上にecho"ああ"と入力すると、ソースには「ああ」と表示があります。

PHPでFTP接続のプログラムを作成して実行するとこれは問題なく動きます。

やはり,Postgresqlの設定がおかしいのでしょうか?それともアクセスの方法が間違っているのでしょうか?

ホント困っています。よろしくお願いします。

Aベストアンサー

>Call to undefined function pg_connect()

定義されていないpg_connectという関数が呼ばれてます(使われてます)って意味ですね。

PHPでのpostgresql操作用モジュールが入っていない可能性が高いです。
ちょっとパッケージ名がそのものズバリはFedoraのは分かりませんが、pgsql.soがインストールされていないか、pgsql.soを読み込む設定になっていないのでしょう。

pgsql.soがまずあるかどうか確認してください。
なければ、インストールしてください。
あった場合、またはインストールした場合、php.iniに
extension = pgsql.so
を追記してください。

その後、apacheを再起動するなりして、php.iniの変更を適用させてください

QPostgreSQLが起動しない・・・

はじめまして、tanu_2です。
玄箱HGをDebian化し、いろいろと遊んでいます。

PostgreSQLをapt-getでインストールし、Webアプリを動かしていたのですが、昨日より突然、PostgreSQLが動かなくなってしまいました。
原因が分からず、サーバを再起動し、
# /etc/init.d/postgresql start

$ pg_ctl start
などを試してみたのですが、動きません。
念のため、初期化(initdb)も試みたのですが、これも失敗してしまいます。
/var/log/postgresql/postgres/logを覗いてみると、

FATAL: could not write lock file "/var/lib/postgres/data/postmaster.pid": No space

となっており、上記ディレクトリにpostmaster.pid書き込みできないよ、と言われているっぽかったので、パーミッションを変更したりして
みましたが、postgresql startにしろ、pg_ctl startにしろ、それぞれのコマンドで起動すると、強制的にパーミッションが「700」に変更されてしまうようで、結果は同じでした。

どなたか、解決策をご教示願えませんでしょうか?

よろしくお願いします。m(_ _)m

はじめまして、tanu_2です。
玄箱HGをDebian化し、いろいろと遊んでいます。

PostgreSQLをapt-getでインストールし、Webアプリを動かしていたのですが、昨日より突然、PostgreSQLが動かなくなってしまいました。
原因が分からず、サーバを再起動し、
# /etc/init.d/postgresql start

$ pg_ctl start
などを試してみたのですが、動きません。
念のため、初期化(initdb)も試みたのですが、これも失敗してしまいます。
/var/log/postgresql/postgres/logを覗いてみると、

FATAL: could not wri...続きを読む

Aベストアンサー

それ以外にも、以下のようなコマンドを使ってデータベースサーバプログラムの起動が出来ますよね。

postmaster -D /usr/local/pgsql/data

ただ、以下のURLのドキュメント内には、次のような記述があります。

「何を実行するにしても、サーバはPostgreSQLユーザアカウントで起動させなければなりません。 rootであってはいけませんし、他のユーザでもいけません。」

パッケージによるインストールであれば、自動でpostgresユーザが作られているはずだと思うけど。(Debianは使ったことないので、確証はなし。)

su - postgres

上記のコマンドでログインするなり、パスワードを忘れたのならroot権限にてpasswdコマンドから変更するなりした後、もう一度postmasterを起動してみよう!

ちなみに、パーミッション関係のエラーは、「Permission denied」ですよね。

参考URL:http://www.postgresql.jp/document/pg803doc/html/postmaster-start.html

それ以外にも、以下のようなコマンドを使ってデータベースサーバプログラムの起動が出来ますよね。

postmaster -D /usr/local/pgsql/data

ただ、以下のURLのドキュメント内には、次のような記述があります。

「何を実行するにしても、サーバはPostgreSQLユーザアカウントで起動させなければなりません。 rootであってはいけませんし、他のユーザでもいけません。」

パッケージによるインストールであれば、自動でpostgresユーザが作られているはずだと思うけど。(Debianは使ったことないので、確証は...続きを読む

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

QPOSTGRESのデータの格納場所はどこでしょうか?

RedHat7.2/PostgreSQL7.2/という環境で、サーバーがクラッシュしてしまい、データを他のサーバに移し変えないといけなくなりました。そこで、PostgreSQLを再インストールしないとデータベースが使えない状況となりました。

データベースを再インストールするのは良いとして、どこかに格納されているはずのデータベースの内容を取り出し、復帰させたいのですが、方法はありますか?大変困っております。よろしくお願いします。

Aベストアンサー

No.1の追加です。
データの移設でよかったと思います。
または、データを読み込むときに、「iオプション」でディレクトリを指定して、元のファイルを読み込んでもよかったと思います。

Qサーバーに接続できない

Windowsで自作データベースの操作をしていたところフリーズしてしまい強制終了させたのですが,再起動後再びそのデータベースにアクセスしようとすると以下のようなエラーがでてデータベースにアクセスできなくなってしまいました.pdAdmin IIIでサーバーに接続を試みようとすると「サーバーは閉じています」と表示されてしまいます.どなたか解決策をご存知の方はご教授をお願いします.

PHP Warning: pg_connect() [<a href='function.pg-connect'>function.pg-connect</a>]: Unable to connect to PostgreSQL server: could not connect to server: Connection refused (0x0000274D/10061)Is the server running on host "localhost" and acceptingTCP/IP connections on port 5432?

【環境】
Windows XP
PostgreSQL8.0.4

Windowsで自作データベースの操作をしていたところフリーズしてしまい強制終了させたのですが,再起動後再びそのデータベースにアクセスしようとすると以下のようなエラーがでてデータベースにアクセスできなくなってしまいました.pdAdmin IIIでサーバーに接続を試みようとすると「サーバーは閉じています」と表示されてしまいます.どなたか解決策をご存知の方はご教授をお願いします.

PHP Warning: pg_connect() [<a href='function.pg-connect'>function.pg-connect</a>]: Unable to connect to PostgreS...続きを読む

Aベストアンサー

強制終了時に、PostgreSQLの一時ファイルが削除されず、PostgreSQL再起動時にエラーが発生してPostgreSQLサーバが起動できなかったという可能性があります。

PostgreSQLインストールフォルダ(「C:\Program Files\PostgreSQL\8.0\」等)の下の「data」フォルダに「postmaster.pid」というファイルが残っていませんか?それを削除して、もう一度PostgreSQLを再起動してみると起動するかもしれません...?

-----
こういった場合、Linuxだと「/tmp/.s.PGSQL.5432」も悪さをするのですが、Windows版の場合、上記ファイルと同等の役割のファイルがあるのかどうかが分かりませんでした。ご存知の方がいらっしゃいましたらフォロー頂けると助かります。

Qpsqlコマンド接続によるパスワードについて

psqlコマンドでDBへの接続を行っております。

/usr/local/pgsql/bin/psql -U postgres -h xxx.xxx.xxx.xxx testdb

上記コマンドをコマンドラインから実行するとパスワードが聞かれます。
パスワード設定をmd5にしているためですが、
その設定を変更せずコマンドラインでパスワードを渡すなどしてパスワードの入力を促す処理をスルーしたいのですが全然出来ません。

どのなたかご存知の方、いらっしゃいましたらご教示の程お願い致します。

Aベストアンサー

PGPASSWORD=○○○ /usr/local/pgsql/bin/psql -U postgres -h xxx.xxx.xxx.xxx testdb

Qtimestampのデータはどのようにして入力

するのでしょうか?

create table tablex(no serial primary key,time timestamp);

insert into tablex(time) values(?);

において?の部分に入れる文字列のフォーマットはどうなるのでしょうか?

例えば
2005年5月5日5時55分55秒
を入れるにはどうしたらいいのでしょうか?

Aベストアンサー

'2005-05-05 05:55:55'

Qpostgresqlの接続ポート5432から5433に変更したら

お世話になります。
postgresql ポート変更を5432から5433に変更し,psql -lを実行したら、
Is the server running locally and accepting conection on Unix domain socket "tmp/.s.5432"?
というエラーが発生しました。5432に戻すとエラーは消えるのですが、環境上5433で接続したいのですが、どこが悪いのか全く検討がつきません。
ご指導をお願い致します。

Aベストアンサー

標準の5432以外に設定した場合は
psql -p 5433
のように -p オプションでポート番号を指定してください。

Qファイルに記述されている複数のSQL文を一度に実行させたい

こんにちわ。

ファイルに記述されているSQL文を、Linuxのコマンドラインなどから
実行したいと考えています。

ファイルに
insert into DB_NAME(aaa,bbb,ccc) values(111,222,333);
insert into DB_NAME(ddd,eee,fff) values(333,777,222);
insert into DB_NAME(aaa,ttt,ddd) values(111,000,999);
...

などのSQL文が複数行(例えば1000個ほど)記述しているのを用意して
なんかしらの方法で一度に実行させたいのです。

mySQLでは、このようなやり方があるのですが
postgreではどのようにすればいいのか、わかりません。

どなたかご存知の方、よろしくお願い致します。

OSはLinuxです。

Aベストアンサー

#1の方も指摘されている通り、 psql を使えば出来ます。

psql で、-f オプションを使うか、該当のDBに接続して \i コマンドを使えば良いでしょう。
http://www.postgresql.jp/document/pg746doc/html/app-psql.html

SQLが記述されているファイルを insert_data.sql、
DBを testdb としますと
例1)-------------------------------------------------------------
$ psql testdb
Welcome to psql x.x.x, the PostgreSQL interactive terminal.




testdb=> \i insert_data.sql
testdb=> \q
-----------------------------------------------------------------

例2)-------------------------------------------------------------
$ psql testdb -f insert_data.sql
-----------------------------------------------------------------

注) ユーザのDBへのアクセス権によっては -U オプションや -W オプションも必要になります。

#1の方も指摘されている通り、 psql を使えば出来ます。

psql で、-f オプションを使うか、該当のDBに接続して \i コマンドを使えば良いでしょう。
http://www.postgresql.jp/document/pg746doc/html/app-psql.html

SQLが記述されているファイルを insert_data.sql、
DBを testdb としますと
例1)-------------------------------------------------------------
$ psql testdb
Welcome to psql x.x.x, the PostgreSQL interactive terminal.




testdb=> \i insert_data.sql
testdb=> \q...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報