2011-09-10 14 views
6

psql mydb利回り:postgresql:psqlを実行するときに-h localhostを指定する必要があるのはなぜですか?

psql: could not connect to server: Permission denied 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

だけで正常に動作しpsql -h localhost mydbpg_hba.confは次のようになります。

local all    all          trust 
host all    all    127.0.0.1/32   trust 
host all    all    ::1/128     trust 

What up?

答えて

2

おそらく、psqlとサーバは、unix-domainソケットとして別の場所を使用しています。 (/ var/pgsql_socket /は奇妙な場所です)これは、異なるパッケージのバイナリを混在させる場合に発生します。 あなたは-hオプションを悪用することにより、異なるディレクトリを使用するようにpsqlを強制することができます(/ tmpに/を開始するには良い場所です)ソケットを検索してみてください。

psql -h /tmp/ 
+0

'-h'スイッチの+1は、ローカル接続(最初のスラッシュ)にも有効です。 Unixドメインソケットのパスは、 '' unix_socket_directory'(http://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORY)の 'postgresql 'プロパティによって決まります.conf'。 –

+0

'unix_socket_directory'プロパティは空にすることができます(私はそれが設定されたことは見たことがありません)。その場合、おそらくデフォルトは/ tmp /になります。 – wildplasser

+0

チップをありがとう - 私はpostgresの標準OS Xパッケージを使用しています。これはUNIXドメインのソケット設定を説明しています。 – Wells

2

これは、OS X上で私に起こった、と問題は、/usr/bin/psqlは私が使っていたものですが、postmasterは/Library/PostgreSQL/9.0から実行されていました。 /Library/PostgreSQL/9.0/bin/psqlを使用して(私のPATHに入る前に)、問題が修正されました。

1

他の回答では、Mac OS X ServerについてLionに何か提供できると思います。私は非常に似たような問題に遭遇する - 私の場合でも、多くの場合非常に良いアイデアの方法であるPostregSQLでネットワークが無効になったとして-h localhostが動作しませんでした。 Mac OS X Serverの場合は、launchdでPostgreSQLサーバを起動します。

いくつかのヒントあなたの周りに行くように:

  • serveradminサービス:postgres
  • launchd設定ファイル:/System/Library/LaunchDaemons/org.postgresql.postgres.plist
  • データベースフォルダ:/var/pgsql
  • ソケットフォルダ:/var/pgsql_socket

コン構成ファイルは、データベースフォルダのpostgresql.confにあるいくつかの設定指示を上書きします。特に、これら2:

  • unix_socket_group
  • unix_socket_permissions

あなたは_postgresアカウントは、サーバーを実行するために使用され、アクティブユーザーが_postgresグループのメンバーである場合、すべてにもアクセス可能であることを見つけることができます。 dscl . -read /Groups/_postgres GroupMembershipを実行することにより

あなたは、グループがこれらのメンバーを持っている、デフォルトではそれを見ることができます:_devicemgr_calendar_teamsserver_www

私はあなたが2つのオプションがありますね。 _postgresグループに自分自身を追加するか、launchd構成plistファイルを変更してください。後では単純なテキスト編集です...しかし、セキュリティに注意してください。この方法では、変更した条件を満たすものにサーバーを開くことになります(最後の段落を参照)。

前者はServer.appまたはdsclコマンドラインユーティリティで実行できます。最初のオプションはおそらく何も追加する必要はありません。システムアカウント(表示 - >システムアカウントの非表示/表示)が表示されていることを確認してください。私は、これは_postgresグループにユーザーを追加する必要がありCLI中毒のようなものだ:

もちろん
sudo dscl . -append /Groups/_postgres GroupMembership $USER 

あなたのMac OS X Serverデータベースへのアクセス権を与えているので、あなたは、あなたのアカウントで実行、あなたは注意する必要がありますバックエンド。したがって、_postgresアカウントを保護するか、別のユーザーを作成してデータベースを操作するか、そこにプライベートなものを保存しないでください。

8

おそらくpsqlの矛盾したバージョン(ライオンのもの、自家製のもの)のせいで、まったく同じことが起こりました。私はまだpsqlに/ tmpソケットディレクトリを使用させる方法を見つけ出すことができませんでしたが、私は回避策があります。

(など、または.zshrc)あなたの.bashrcに次のように置く:

export PGHOST=/tmp 

これは、-hフラグに

を供給することなく、バック正しいソケットディレクトリへの正しい「ホスト」を設定
関連する問題