web-dev-qa-db-ja.com

postgresql datababseのエラー:サーバーはローカルで実行され、Unixドメインソケット "/var/run/postgresql/.s.PGSQL.5432"で接続を受け入れていますか?

rake db:migrateまたはRails sコマンドを実行すると、同じエラーが表示されます。

Error : could not connect to server: 
No such file or directory Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Rails sを試すと、ブラウザにエラーが表示されます。

これは私のdatabase.ymlです

default: &default
adapter: postgresql
encoding: unicode

pool: 5

development:
<<: *default
database: books_development




test:
<<: *default
database: books_test



production:
<<: *default
database: books_production
username: abd
password: <%= ENV['BOOKS_DATABASE_PASSWORD'] %>

注:データベースbooks_developmentがあります。 books_test; Sudo /etc/init.d/postgresql startを試すと、postresqlは問題なく実行されています

私は実行しました:

create database books_development;
create database books_test; 

psqlコンソールで。そして、それは成功したと言った

私は多くの解決策を試しましたが、昨日解決策を探して過ごしましたが、関連する質問の解決策は私のエラーを解決しませんでした。

Postgresql-9.4(最新)とxubuntu 14.04があります

何か案は?

12
adyouri

DebianまたはUbuntuなどのDebian派生製品用にパッケージ化されたPostgreSQLの規則は、Unixドメインソケットのディレクトリとして/var/run/postgresqlを使用することです。一方、自己コンパイルされたpostgresクライアントライブラリの規則は、他の方法で自己設定されない限り、/tmpを使用することです。

したがって、この両方の不一致の通常の根本的な原因は、自己コンパイルされたクライアント側のものと事前にコンパイルされたサーバー側パッケージが混在していることです(クライアントとサーバーが同じマシンにインストールされていても、クライアント側とサーバー側はまだ明確で、同期していない可能性があります)。

/tmpからこのディレクトリへのソフトリンクは、一般的に/tmpが再起動時に空になるため、再起動のたびにリンクが失われることを除いて、askerが示唆するように機能します。

より良いオプションは、database.ymlのエントリとして追加することです。

  • 実際のソケットパスがHost: /tmpの場合は/tmp(自己コンパイルサーバー、パッケージ化されたクライアント)

  • またはHost: /var/run/postgresqlは、実際のソケットパス/var/run/postgresql/(パッケージサーバー、自己コンパイルクライアント)の場合。

Hostフィールドの値がスラッシュ文字で始まる場合、postgresライブラリは、それがホスト名ではなくローカルソケットのディレクトリの場所であることを認識します。ディレクトリ.s.PGSQL.portnumber内のファイル名が生成されます。指定しないでください。ディレクトリのみです。

もう1つの可能性は、自己コンパイルされたソフトウェアパッケージをDebianにできるだけ近づけて設定し、デフォルトを上書きすることです。

12
Daniel Vérité

Ubuntu 14.04でpostgresユーザーにpsqlを入力すると、同じIs the server running locally and accepting connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?エラーが発生しました。既存の実用的なソリューションが見つかりませんでした。

私の短い答えは、私のインストールはvar/pgsql_socketディレクトリを作成しましたが、設定ファイルはそれを知りませんでした。

1)postgres.confファイルを見つけます(私にとってはetc/postgresql/9.6/mainにありました)
2)listen_addresses = '*'に変更
3)別のUNIXソケットディレクトリを追加します
unix_socket_directories = '/var/run/postgresql, /var/pgsql_socket' # comma-separated list of directories
4)この時点で、sudoサービスのpostgresql startは開始しようとしましたが、ロックファイルを作成する権限がありませんでした。
* The PostgreSQL server failed to start. Please check the log output: 2016-10-05 17:14:55 CEST [28472-1] FATAL: could not create lock file "/var/pgsql_socket/.s.PGSQL.5432.lock": Permission denied 2016-10-05 17:14:55 CEST [28472-2] LOG: database system is shut down
5)権限の変更( Mark Berryのコメントはこちら から見つかりました)
$ Sudo chown root.postgres /var/pgsql_socket
$ Sudo chmod g+wx /var/pgsql_socket
6)Sudo service postgresql start
Sudo -i -u postgres
psql

それは最終的に私のために働いた

5
descript

解決しました。私はちょうどを使用してソフトリンクを作成しました:

Sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

そして、編集した

/etc/postgresql/9.4/main/pg_hba.conf

(別のバージョンのpostgresqlがある場合、パスの9.4を変更する必要があります)

から:

local all postgres peer

に:

local all postgres md5

3
adyouri

古いロックファイル/var/run/postgresql/.s.PGSQL.5432.lockによって、まったく同じ症状が発生する可能性があります。この症状の1つは、psqlレポートです

psql:サーバーに接続できませんでした:そのようなファイルまたはディレクトリはありませんサーバーはローカルで実行され、Unixドメインソケット "/var/run/postgresql/.s.PGSQL.5432"で接続を受け入れていますか?

netstat -lp --protocol=unix | grep postgresによって報告されるように、このパスを使用できるソケットが明らかにあるにもかかわらず

この問題は、ロックファイルを削除してpostgresqlを再起動することで解決できます。これは、パージして再インストールするよりも明らかに侵襲的ではありません。

Sudo rm /var/run/postgresql/.s.PGSQL.5432.lock
Sudo service postgresql restart
2
David Weber

解決策:

これを試して

export LC_ALL="en_US.UTF-8"

この。 (9.は私の現在のPostgreSQLバージョンです。バージョンを書いてください!)

Sudo pg_createcluster 9.3 main --start
2
bogdanvlviv

このエラーが発生した場合、postgresサーバーは別のポート(5433)で実際にリッスンしていました。これを解決するには、database.ymlにRails=を使用するように指示する行を追加します。

port: 5433
1
tobasti

pg_lsclustersを実行すると、デバイスで実行されているすべてのpostgresクラスターが一覧表示されます。例:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

ステータスがダウンランの場合

#format is pg_ctlcluster <version> <cluster> <action>
Sudo pg_ctlcluster 9.6 main start

このプロセスが成功しなかった場合、エラーがスローされます。私のエラーは(/var/log/postgresql/postgresql-9.6-main.logでエラーログを見ることができます)

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

postgres/var/lib/postgresql/version_no/mainの所有者であることを確認してください。例:Sudo chown postgres -R /var/lib/postgresql/9.6/main/

それは私に偶然起こり、「ssl-cert」グループから誤ってPostgresユーザーを削除したことが判明しました。以下のコードを実行して、ユーザーグループの問題と権限を修正します

#set user to group back with
Sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
Sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
Sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
Sudo service postgres restart
1
Noushad

つまり、Postgresサーバーが実行されていません。

チェックPostgresターミナルからのサービスステータス

Sudo service postgresql status

有効にするPostgresサービス、開始されていない場合

Sudo service postgresql start

[〜#〜] or [〜#〜]

Sudo service postgresql restart

Postgresサービスが正常に開始された場合、コマンドは機能するはずです。

0
Sumon Sarker