[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 メーリングリストの案内