web-dev-qa-db-ja.com

UbuntuでPostgreSQL 9.3が起動しないのはなぜですか?

APTリポジトリからPostgreSQL 9.3をUbuntu 12.04および13.04を実行している2つのVMに正常にインストールしましたが、Ubuntu 12.04を実行しているホストマシンに正しくインストールできません。

インストール(今回)は問題ないようですが、おそらく私が理解していないエラーがあります:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

それで、自分をPostgreSQLユーザーとして追加しようとしましたが、次のようになります。

createuser: could not connect to database postgres: 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"?

システムモニターでPostgreSQLが実行されているのが見えません。/var/run/postgresql/フォルダーにファイルがありません...完全に空です。

編集:VMには、/ var/run/postgresql /に9.3-main.pidというファイルがあります

/ var/log/postgresqlにあるホストマシンのログファイルには何もありません。

だから...ここで何が起こっているのか、私のVMでは起こっていないのですか?私が言ったように、PostGISやPGAdminを含むVM上の他のインストールは完璧になりました...このホストマシンが通過しない理由はわかりません...

13
DPSSpatial

PostgreSQLのインストール時にロケール設定が適切に構成されませんでした。パージして再インストールしても解決しませんでした。私は ここでの説明 に従いましたが、それでうまくいきました。

以下に再現されるリンクされた情報の本質的な部分:

問題は次のように現れました。

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

最初のものは実行することで非常に簡単に解決できました:

#dpkg-reconfigure locales

...優先するロケールを選択します。

しかし、その後もPostgreSQLは起動を拒否しました。これは、インストールプロセスがインストール時にクラスターを作成しようとしたが、ロケールが悪いために実行されなかったためです。したがって、次のコマンドを実行してこの手順をやり直す必要があります。

#pg_createcluster 9.3 main --start

(PostgreSQL 9.3バージョンの場合)

そのステップの後、PostgreSQLは完全に起動します

#/etc/init.d/postgresql start
16
Marko Benko

うまくいけば、あなたはすでにこの問題を解決しましたが、私は別の原因があるように見える同様の問題に遭遇しています。問題がまだ解決しない場合は、私の経験が役立つかもしれません。

Ubuntuでの9.3に関する私の問題は、ソケットdirが/ runの一時的なディレクトリであることに関するものです。基本的に、initアクションにソケットdirが存在しない場合は、init.dスクリプトが/ run/postgresqlにソケットdirを作成することに注意してください。これは常に再起動後の状態になります。

ただし、問題は、ソケットディレクトリが存在しない場合、開始アクションを実行する前にinit.dスクリプトが終了することです。これは、pg_lsclustersの呼び出しがソケットディレクトリなしで失敗するため、開始アクションでソケットディレクトリが作成されないためです。

最善の解決策はわかりませんが、ソケットアクションを作成するロジックを開始アクションからpg_lsclustersの呼び出し前に移動すると、再起動後にサーバーを問題なく起動できます。

次に、ソケットディレクトリの作成を処理する開始アクションの一部を示します。

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

これの根本的な原因が明らかになった場合は、アップデートを投稿します。これは明らかに期待される動作ではないためです。

補遺:

この問題が発生した理由は、 nix_socket_directories に適切な値が設定されていなかったためだと思います。 9.2では、この構成オプションは以前はunix_socket_directoryでしたが、unix_socket_directoriesに切り替えるのではなく、これを削除しました。 unix_socket_directoriesの値を設定したので、サーバーの起動に問題はありませんでした。

6
tdg5

私はソケットファイルでいくつかの問題を抱えていました、あなたのケースでは/var/run/postgresql/.s.PGSQL.5432

詳細については、postgresqlを開始する前に/ var/run/postgresqlディレクトリが存在し、書き込み可能であることを確認してください discussion を参照してください。

また、接続時に-hフラグを使用します。

psql -h localhost 

それが解決するかどうかを確認します。

3
Joe Love

私の側では、起動スクリプトが間違っています。設定ファイルは/ etc/postgresql/9.3/mainにインストールされていますが、スクリプト/ usr/share/postgresql-common/init.d-functionsが検索しています

for c in /etc/postgresql/"$2"/*; do 

この行を次で置き換えます

for c in /etc/postgresql/"$2"/main; do
1
k_o_

これはUbuntuの問題を修正するようです:

Postgresql.confを編集します。

unix_socket_directories='/var/run/postgresql

service postgresql start

1
sorin

私はPSQLの初心者ですが、start.confを編集して問題を解決しました。サーバーを手動で管理するための「auto」設定にコメントしましたが、auto、manual、またはdisabledの値が必要です。

EGD。

1
Ernesto