PostgreSQL 8.1.22 データベースを搭載した CentOS 5.5 サーバーに Roundcube をインストールしようとしています。
インストーラ スクリプトの最初のページでは、PHP ライブラリなどの存在をチェックしますが、すべて緑色の OK が表示されます。オプションのものもわざわざインストールしました。
2 ページ目では 2 つの構成ファイル (main.inc.php と db.inc.php) が生成され、これを配置します。
3 ページ目では問題が発生します。
DB 構成 DSN (書き込み) を確認してください: OK ではありません (MDB2 エラー: 接続に失敗しました)
設定されたデータベースが存在し、ユーザーに書き込み権限があることを確認してください。
DSN: pgsql://roundcube:password@localhost/roundcubemail
そこに表示されている情報 (ユーザー roundcube、パスワード password、サーバー localhost、データベース roundcubemail) はすべて正しいです。データベース roundcubemail はユーザー roundcube に属しており、書き込み権限があります。
なぜそのデータベースに接続できないのか、まったくわかりません。同じサーバー上の同じ Apache で実行されている phpPgAdmin を使用して管理しています。
アップデート
さらに詳しい情報: 私の postgres ログ ファイルには次のような内容が多数含まれています。
FATAL: no pg_hba.conf entry for host "127.0.0.1", user "roundcube", database "roundcubemail", SSL off
ただし、私の pg_hba.conf ファイルには次のような内容が含まれています。
# "local" is for Unix domain socket connections only
local all all trust
host all all 127.0.0.1/32 trust
telnet を使用してポート 5432 上の localhost と 127.0.0.1 の両方に接続すると正常に動作します。
答え1
上記の DerfK の回答は間違っています。適切に設定していれば、Unix ソケットと Roundcube を使用して PostgreSQL を使用できます。db.inc.php では、次のように記述する必要があります。
$rcmail_config['db_dsnw'] = 'pgsql://roundcube:*password*@unix(/tmp)/roundcube';
pgsqlでデータベース「roundcube」にパスワード「roundcube」を持つユーザー「roundcube」を作成した場合、パスワードメインの postgresql.conf で、次の変更を行って IP 層でのリッスンを防ぐ必要があります。
listen_addresses = ''
unix_socket_directory = '/tmp'
ssl = false # There's no point in using SSL on a local UNIX socket except wasting CPU
また、これが最も重要な部分ですが、pg_hba.conf を変更して次の行を追加する必要があります。
local all roundcube md5
すべてを再起動すると、完全に正常に動作し、TCP 接続を使用するよりも高速になります (すべての IP カプセル化を回避するため)。