[PHP-users 21205]Re: pgsqlconnectエラー
KOYAMA Tetsuji
koyama @ hoge.org
2004年 4月 9日 (金) 01:34:35 JST
小山です。
PEAR DB の話とはちょっと離れてきましたが。(笑)
At Thu, 08 Apr 2004 13:26:58 +0900 (JST),
Tatsuo Ishii wrote:
> "unix"というのは,Unixドメインソケットで接続するのという意味ですよね?
> だとすると,PEAR DBからpg_connectを呼び出すときに,「ポート番号」を渡
> すことができるようになっていないと困ると思います.
> # 結局ポート番号からUnixドメインソケットのファイル名をpg_connectから更
> # に呼び出されるlibpqの関数で作っているだけなんですが.
libpq の PGconnectStart() のソースを読むと、UNIX ドメインソケットか
どうかは host の値が / で始まっているかどうかで判断しているように見え
ます。host がなければ UNIX ドメインソケット(パス名はデフォルト)で、
host があってその値が / で始まる絶対パスの場合は、そのパス名をソケット
として UNIX ドメインソケットで接続するという理解で間違っていますでしょ
うか?
> ただこの場合でも,結局どうやってpg_connectに渡す引数が作られているのか
> を意識しないと駄目だと思うのですよ.
はい。最終的には pg_connect が呼ばれるのには違いないので、どのような
conn string が生成されるか、困ったときには調べてみることも大事だと思い
ます。DB_pgsql::connect() のコードですね。
> たぶん,Unixドメインソケットを使って「ポート」番号5433で接続するために
> は,
>
> 'protocol' => 'tcp'
> 'hostspec' => ''
> 'port' => '5433'
>
> とかしないといけないと思うのですが.
すいません。UNIX ドメインソケットのポート番号というのがどうもよく理
解できません。sys/un.h の struct sockaddr_un にあるように、UNIX ドメイ
ンソケットはパス名のみで区別されると理解しているのですが、鍵かっこつき
で「ポート」と書かれているということは、何か別の意味があるのでしょうか。
標準以外のパスで UNIX ドメインソケットを用いて接続したい場合は
$dsn = array(
'phptype' => 'pgsql',
'dbsyntax' => 'pgsql',
'username' => 'www',
'protocol' => 'unix',
'socket' => '/path/to/unix/domain/socket',
'database' => 'test_db',
);
とすれば良いと思います。(試してません)
--
小山 哲志@ビート・クラフト
koyama @ beatcraft.com
koyama @ hoge.org
PHP-users メーリングリストの案内