ポート5432でpostgresqlに接続できません


82

PostgreSQL 8.4を含むBitnami Djangoスタックをインストールしました。

実行するpsql -U postgresと、次のエラーが表示されます。

psql: 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"?

PGは間違いなく実行されており、pg_hba.confファイルは次のようになります。

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

何が得られますか?

pgが実行されていることの「証明」:

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf# 

私はあなたが何を求めているのか見当がつかず、あなたは決してインプットを提供しませんでした。これは、100人が一般的なエラーを受け取り、さまざまなことを報告することです。このサイトのフォーマットは完全にずれています。
エヴァンキャロル

回答:


87

この問題はpostgres、バージョン番号なしでパッケージをインストールすることに起因します。がpostgresインストールされ、それが正しいバージョンになり、セットアップのスクリプトは、クラスタは正常に実行されません。それはパッケージングの問題です。

postgresこのクラスターを作成して実行するために実行できるスクリプトがあることに満足している場合postgres。ただし、もっと簡単な方法があります。

最初に古いpostgresインストールをパージします。現在、問題は9.1にあるため、これがインストールされていると想定します

sudo apt-get remove --purge postgresql-9.1

今、単に再インストール

sudo apt-get install postgresql-9.1

パッケージ名とバージョン番号をメモします。HTH。


3
これはpostgres 9.3で役立ちました。
sevenseacat 14

1
これは、あまりにものpostgres 9.4 / Ubuntuの14.10、と連携し、受け入れ答えなければなりません
マルタ

1
この答えは、postgres 9.4と9.3の取り違えに役立ちました。クール。
インゴ

2
ubuntu 16.04およびpostgres 9.5で機能しましたが、最初にすべての postgres関連パッケージを削除する必要がありました。
エバート

2
これは本当に素晴らしい答えです!また、postgres側の恐ろしいユーザーエクスペリエンス
user1952500

23

このエラーメッセージはUnixドメインソケットを参照しているため、netstat呼び出しを調整して除外しないようにする必要があります。オプションなしで試してください-t

netstat -nlp | grep 5432

クライアントが接続しようとしているサーバーでは/tmp/.s.PGSQL.5432なく、サーバーが実際にソケットでリッスンしている/var/run/postgresql/.s.PGSQL.5432と思います。これは、DebianまたはUbuntuで手動またはサードパーティのPostgreSQLパッケージを使用する場合の典型的な問題です。Unixドメインソケットディレクトリのソースのデフォルトは/tmp、Debianパッケージングによってに変更されるため/var/run/postgresqlです。

考えられる回避策:

  • サードパーティのパッケージが提供するクライアントを使用します(call /opt/djangostack-1.3-0/postgresql/bin/psql)。Ubuntuが提供するパッケージを完全にアンインストールする可能性があります(他の逆依存関係のために困難になる場合があります)。
  • サードパーティパッケージのソケットディレクトリをDebian / Ubuntuと互換性があるように修正します。
  • -H localhost代わりにTCP / IP経由で接続するために使用します。
  • -h /tmpまたはPGHOST適切な設定を使用して、適切なディレクトリを指定します。
  • サードパーティのパッケージを使用しないでください。

19

これは私のために働く:

編集:postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

有効化または追加:

listen_addresses = '*'

データベースエンジンを再起動します。

sudo service postgresql restart

また、ファイルを確認できます pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

ネットワークまたはホストアドレスを追加します。

host    all             all             192.168.1.0/24          md5

listen_address = '*'がトリックを作りました。「localhost」でのみリッスンし、127.0.0.1ではリッスンしていませんでした。ありがとうございました!
mwm

私の神...最後に機能したもの-アドレスを追加し、listen_addressのコメントを外すまで、他に何も機能しませんでした。
AntonB

一を足す!それは私のために働いた。
アトゥールMakwana

1
これはubuntu windows bashで動作します。
アーマダリバロック

私はそれは、Windows 10上のUbuntu Serverコマンドはbash上で動作していることを確認することができます
ロナルド・

18

を使用psql -U postgres -h localhostして、UNIXドメインソケットの代わりにTCPを介して接続を強制的に行うことができます。あなたのnetstat出力は、PostgreSQLサーバがローカルホストのポート5432でリッスンしていることを示しています。

netstatの別の呼び出しを使用して、PostgrSQLサーバーがどのローカルUNIXソケットを使用しているかを確認できます。

netstat -lp --protocol=unix | grep postgres

いずれにしても、PostgreSQLサーバーがリッスンするインターフェイスはで構成されpostgresql.confます。


17

このようなソフトリンクを作成するだけです:

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

1
これは私にとってはうまくいき、postgresqlの設定を変更することなく最も簡単な解決策のように思えました。リンクを作成するときは、必ずスーパーユーザーであることを確認してください。
ブレンダン

2
LN:シンボリックリンクの作成に失敗しました「/var/run/postgresql/.s.PGSQL.5432」:ファイルが存在する
P_M

/ var / run /ディレクトリに「postgresql」フォルダーを作成しました。存在しませんでした。
Ikrom

素晴らしい作品、この背後にある理由は何ですか?
テオマンシパヒ

7

これを行うことで動作させます:

dpkg-reconfigure locales

好みのロケールを選択して実行します

pg_createcluster 9.5 main --start

(9.5はpostgresqlの私のバージョンです)

/etc/init.d/postgresql start

そしてそれは動作します!

sudo su - postgres
psql

ああ、ごめんなさい、コマンドはそれを明確にしたと思う。私にとって、私はpostgresqlを再インストールするときにこの問題に遭遇し、タイプごとに再起動しようとしservice postgresql restart ますが、postgresql clusterがなかったと言います。それから私は私を助けるためにこの方法を見つける:)
mymusise

グーグルの3時間後、ついに私の問題を修正しました。dpkg-reconfigure locales非常に重要です。
ドンマムズ

5

OpenACSに基づいており、PostgreSQLの最新バージョンでは実行されないProject Openを使用しているため、Debian SqueezeでPostgreSQL 8.1をコンパイルする必要がありました。

デフォルトのコンパイル構成ではunix_socketinを使用しますが、/tmpPostgreSQLに依存するProject Openはunix_socketatを探すため機能しません/var/run/postgresql

postgresql.confソケットの場所を設定するための設定があります。私の問題は私が設定することができますどちらかということだった/tmppsql働いていたが、開いているプロジェクトではないか、私はそれを設定することができ/var/run/postgresql、およびpsql動作しないだろうが、プロジェクトのオープンをしました。

この問題の解決策の1つは、Peterの提案に基づいて/var/run/postgresql、次のようにソケットを設定し、実行するpsqlことです。

psql -h /var/run/postgresql

これは、ローカルアクセス許可を使用してローカルで実行されます。唯一の欠点は、単に「psql」よりも入力が多いことです。

誰かが行ったもう1つの提案は、2つの場所の間にシンボリックリンクを作成することでした。これも機能しましたが、再起動時にリンクが消えました。-h引数を使用する方が簡単かもしれませんが、のPostgreSQLスクリプト内からシンボリックリンクを作成しました/etc/init.d。「開始」セクションにシンボリックリンク作成コマンドを配置しました。もちろん、停止および開始または再起動コマンドを発行すると、既存のシンボリックリンクを再作成しようとしますが、警告メッセージ以外はおそらく害はありません。

私の場合、次の代わりに:

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

私は持っています

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

unix_socketを明示的に/var/run/postgresql/.s.PGSQL.5432inに設定しましたpostgresql.conf


3

解決:

これを行う

export LC_ALL="en_US.UTF-8"

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

sudo pg_createcluster 9.3 main --start

うーん、それが私の問題を解決する唯一の方法だった、ありがとう。
user3687723

3

Postgresサービスがエラーなしで稼働している場合、またはPostgresサービスの開始時にエラーがなく、上記のエラーが引き続き発生する場合は、以下の手順に従ってください

ステップ1:実行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

ほとんどの場合、ステータスはあなたのケースとpostgresサービスでダウンします

ステップ2:pg_ctlclusterを再起動します

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

#restart postgres
sudo service postgres restart

ステップ3:ステップ2が失敗し、エラーがスローされた

このプロセスが成功しない場合、エラーがスローされます。エラーログを見ることができます/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`

ステップ4:postgresの所有権を確認する

postgresの所有者であることを確認してください/var/lib/postgresql/version_no/main

そうでない場合は、実行します

sudo chown postgres -R /var/lib/postgresql/9.6/main/

手順5:postgresユーザーがssl-certユーザーグループに属していることを確認する

誤ってPostgresユーザーをssl-certグループから削除したことが判明しました。以下のコードを実行して、ユーザーグループの問題を修正し、権限を修正します

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

# Fix 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

2

私の場合、編集中にタイプミスをしたことが原因でした /etc/postgresql/9.5/main/pg_hba.conf

私が変更され:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

に:

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

しかしMD5、小文字でなければなりませんでしたmd5

# Database administrative login by Unix domain socket
local   all             postgres                                md5

1
これは:)私は以前に地雷を変更していた私のためにそれを固定答えであるtrusted代わりにtrust、サービスを再起動していなかった、とそれだけで私はすでに私が変わっ何忘れてしまった次の日を破った
Phlippieボスマン

2

Postgresのアンインストールは納得がいかないようです。これは私の問題を解決するのに役立ちます:

  1. postgresサーバーを起動します。

    sudo systemctl start postgresql
    
  2. サーバーが起動時に起動することを確認します。

    sudo systemctl enable postgresql
    

詳細については、こちらの DigitalOceanサイトをご覧ください


2

私はpostgres-9.5サーバーでこの問題を解決できませんでした。このサイトおよび他のサイトで修正の順列をすべて試行して3日間ゼロの進捗があった後、サーバーを再インストールし、5日間の作業を失うことにしました。しかし、新しいインスタンスで問題を再現しました。これは、私が破局的なアプローチをとる前に、それを修正する方法についてのいくつかの視点を提供するかもしれません。

まず、postgresql.confのすべてのログ設定を無効にします。これはセクションです:

# ERROR REPORTING AND LOGGING

そのセクションのすべてをコメント化します。次に、サービスを再起動します。

再起動するときに、使用する /etc/init.d/postgresql startrestart 、再起動中にスーパーユーザーモードにすると便利です。その操作のためにXウィンドウを開いていました。そのスーパーユーザーモードはで設定できますsudo -i

次の簡単なコマンドでサーバーにアクセスできることを確認します。 psql -l -U postgres

それでも解決しない場合は、次のことを考慮してください。

解決策を見つけようとして、多くのフォルダーの所有権を変更していました。これらのフォルダの所有権chmodを2日以上元に戻そうとしていることを知っていました。それらのフォルダーの所有権を既に台無しにしていて、サーバーを完全にパージしたくない場合は、影響を受けるすべてのフォルダーの設定の追跡を開始して、元の状態に戻します。別のシステムで並列インストールを実行し、すべてのフォルダーの所有権と設定を体系的に確認することをお勧めします。面倒ですが、データにアクセスできる場合があります。

アクセスしたら# ERROR REPORTING AND LOGGINGpostgresql.confファイルのセクション内の関連する各行を体系的に変更します。再起動してテストします。ログのデフォルトフォルダーが失敗の原因であることがわかりました。具体的にコメントアウトしましたlog_directory。システムがログをドロップするデフォルトのフォルダーはです/var/log/postgresql


1

/var/lib/postgresql/9.3/mainフォルダーのアクセス許可を変更したために発生した可能性があります。

以下のコマンドを使用して、700に変更してみてください。

sudo chmod 700 main

1

Flaskを使用しているので、これは質問と正確には関連していませんが、これは私が得ていた正確なエラーであり、アイデアを得るための最も関連性の高いスレッドでした。

私のセットアップ:Windowsサブシステムfor Linux、Docker-compose w / makefile w / dockerfile、Flask、Postgresql(テーブルで構成されるスキーマを使用)

postgresに接続するには、次のように接続文字列を設定します。

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"

注:このスレッドで任意のメソッドを使用して動作するIP(localhost、127.0.0.1など)を取得したことはありません。localhostの代わりにコンテナ名を使用するアイデアは、ここから来ました:https : //github.com/docker-library/postgres/issues/297

スキーマを設定します。

from sqlalchemy import MetaData
db = SQLAlchemy(app, metadata=MetaData(schema="<schema_name>"))

セッションをセットアップするときに、関数の検索パスを設定します。

db.session.execute("SET search_path TO <schema_name>")

0

ピーター・アイゼントラウトが説明したのとまったく同じ問題がありました。netstat -nlp | grep 5432コマンドを使用すると、サーバーがsocketでリッスンしていることがわかりました/tmp/.s.PGSQL.5432

これを修正するには、postgresql.confファイルを編集して次の行を変更します。

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

ここでservice postgresql-9.4 restart(9-4をご使用のバージョンに置き換えて)実行すると、リモート接続が機能するはずです。

ローカル接続を許可するには、/var/run/postgresqlディレクトリへのシンボリックリンクを作成するだけです。

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

あなたpg_hba.confも正しく設定されていることを忘れないでください。


0

私の場合、私がしなければならないことはこれだけでした:

sudo service postgresql restart

その後

sudo -u postgres psql

これはうまくいきました。それが役に立てば幸い。乾杯:)。



0

同じ問題がありました(Ubuntu 15.10(wily))。sudo find / -name 'pg_hba.conf' -printまたはsudo find / -name 'postgresql.conf' -print空になった。それ以前は、postgresqlの複数のインスタンスがインストールされているようでした。

インストール済み、または依存関係の問題の一覧が表示された場合も同様のことがあります

.../postgresql
.../postgresql-9.x 

等々。

その場合、sudo apt-get autoremove各パッケージを1つずつ作成する必要があります。

その後、これに従って手紙を送れば、問題ありません。特にキーのインポートとソースリストへの追加に関しては、まず

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

wilyを使用しない場合はwily、リリースに置き換えてください。つまり、lsb_release -cs

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

そして、あなたは問題なく、接続してユーザーを作成できるはずです。

期待される出力:

Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data   /var/lib/postgresql/9.3/main
locale en_US.UTF-8
socket /var/run/postgresql
port   5432

ソリューションのソース(クレジット)


0

同じ問題を抱えながら、私は別のものを試しました:

postgresqlデーモンを手動で起動しました:

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

それでは、私がやったことの下限値を設定したshared_buffersmax_connectionspostgresql.confrestartサービスを。

これで問題は解決しました!

完全なエラーログは次のとおりです。

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

0

何度も試行錯誤した結果、他の投稿に基づいて解決策を見つけました!

dpkg -l | grep postgres
apt-get --purge remove <package-founded-1> <package-founded-2>
whereis postgres
whereis postgresql
sudo rm -rf <paths-founded>
sudo userdel -f postgres


0

/ tmp unix_socket_directoriesを追加するだけです

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.