PostgreSQL 서버가 시작되지 않습니다


14

[우분투 16.04] postgresql 9.5를 의존성과 함께 설치했습니다 :

sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev

내가 달리기 psql를 원할 때 나는 얻는다 :

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

그러나 /var/run/postgresql/비어 있습니다. posgresql을 다시 시작하면 모든 것이 정상으로 보입니다.

$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.

$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
  Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
  Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 3523 (code=exited, status=0/SUCCESS)

그러나 확인하면 ps aux그러한 PID가 없습니다 (왜 ??)

완전한 회복은 전혀 도움이되지 않습니다. 어떻게 고칠 수 있습니까?


/var/log/posgtresql/postgresql-9.5-main.log 파일은 무엇을 보여줍니까?
ubfan1

이 파일이 비어
mike927

답변:


14

이것은 Xenial에서 PostgreSQL을 체계적으로 통합 한 특유의 특징입니다.

postgresql-common 패키지에 의해 설치된 postgresql 서비스 유닛은 더미 서비스 일 뿐이며 실제 서비스 postgresql@9.6-main은 의존성을 통해 시작됩니다. 명령을 실행하여 해당 종속성을 볼 수 있습니다

systemctl list-dependencies postgresql

이러한 종속성은 영구적이지 않지만 /lib/systemd/system-generators/postgresql-generatorpostgresql-common 패키지와 함께 제공되는 systemd generator에 의해 시스템 부팅 중에 생성 됩니다. 생성기는 파일의 시작 모드 /etc/postgresql/9.6/main/start.conf가로 설정되어 auto있는지 확인하고, 필요한 경우 인스턴스 9.6-main이 시작되도록하는 종속성을 설정합니다.

(보다 정확하게는 모든 구성 하위 디렉토리를 확인 하고 자동 시작을 위해 구성된 모든 인스턴스에 /etc/postgresql/*/*대한 종속성을 작성 하지만 기본 설치에는 하나의 인스턴스 만 있습니다.)

시스템 생성기 (참조 man systemd.generator) 의 제한으로 인해이 프로세스가 실패하여 재부팅 후 종속성이 없을 수 있습니다. 그런 다음 Systemd는 더미 서비스 시작 하고 작성합니다.

systemd[1]: Starting PostgreSQL RDBMS...
systemd[1]: Started PostgreSQL RDBMS.

로그에 있지만 그렇지 않으면 아무것도하지 않습니다. 다음을 통해 수동으로 서비스를 시작하려고합니다.

systemctl start postgresql

그 결과를 그대로 재현합니다. 명령 실행

systemctl daemon-reload

root로서 수동으로 생성기를 다시 실행하고 대부분의 경우 다음에 재부팅 할 때까지 문제를 해결합니다.

문제를 영구적으로 해결하려면 부팅 중에 생성기가 실패하는 이유를 찾아야합니다. 가능한 원인은 systemd.generator 맨 페이지에서 찾을 수 있습니다. 필자의 경우 PostgreSQL 구성 파일 /etc/postgresql/9.6/main/postgresql.conf로 부팅 중에 생성기가 일찍 실행되었을 때 사용할 수 없었던 다른 파일 시스템에 심볼릭 링크되었습니다. postgresql-generator필요하지 않더라도 해당 파일의 존재를 확인합니다.


문제를 해결할 때 답을 자유롭게 편집하십시오. :)
storm

9

Tilman의 답변을 확장했지만 충분한 Kudos가 언급하지 않았습니다 ...

서비스를 postgresql이라고 할 필요가없고 래퍼 더미 서비스를 신경 쓰지 않으면 실제 서비스를 직접 제어하는 ​​것이 좋습니다. 이름은 postgresql@$version-$cluster.service입니다 . 귀하의 경우 postgresql-9.5-main 이어야합니다 . 시작하고 싶다

systemctl start postgresql@9.5-main

그리고 중지 :

systemctl stop postgresql@9.5-main

상태 는 자동 생성 랩퍼 서비스보다 훨씬 더 정확하고 정확한 정보를 제공합니다.

systemctl status postgresql@9.5-main

9.6의 경우 다음과 같습니다.

● postgresql@9.6-main.service - PostgreSQL Cluster 9.6-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-09-13 00:41:50 CEST; 7h ago
  Process: 10235 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop (code=exited, status=2)
  Process: 10676 ExecStart=postgresql@%i --skip-systemctl-redirect %i start (code=exited, status=0/SUCCESS)
 Main PID: 10683 (postgres)
   CGroup: /system.slice/system-postgresql.slice/postgresql@9.6-main.service
           ├─10683 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf
           ├─10685 postgres: 9.6/main: checkpointer process
           ├─10686 postgres: 9.6/main: writer process
           ├─10748 postgres: 9.6/main: wal writer process
           ├─10749 postgres: 9.6/main: autovacuum launcher process
           ├─10750 postgres: 9.6/main: archiver process   last was 000000020000000000000082
           ├─10751 postgres: 9.6/main: stats collector process

4

필자의 경우 이것은 잘못 구성된 로케일과 관련이 있습니다.

이 dba.stackexchange.com 답변에서 해결책 찾았습니다 .

  1. sudo dpkg-reconfigure locales필요한 로케일을 생성하는 데 사용
  2. 기존 데이터베이스 클러스터를 sudo pg_dropcluster 9.5 main삭제하십시오 ( 클러스터의 모든 데이터가 지워집니다).
  3. 통해 클러스터를 다시 만듭니다 sudo pg_createcluster 9.5 main --start
  4. 를 통해 PostgreSQL을 다시 시작하십시오 sudo service postgresql restart

1

ubuntu 16.04와 함께 시스템 시작 스크립트를 사용하는 것이 좋습니다. 요즘 init 스크립트가 제대로 작동하지 않을 수 있습니다. Postgres 9.5는 이미 우분투 저장소에 있으므로 대신 시스템 시작을 시도해야합니다.


표준 우분투를 사용하는 나는 같은 결과를 얻을 REPO
mike927

그것은 수치 스러운데, postgres 사람들은 아직 체계화되어 있지 않은 것 같습니다. postgres 패키지에 대해 버그를 제기하거나 시스템 지원에 대한 메일 링리스트에 문의하십시오. 나는 postgres를 많이 사용하지 않지만 일부 오픈 소스 프로젝트는 시스템화에 반대하는 입장을 취했거나 그것을 지원하는 것에 대한 내부 토론에 얽혀있을 수 있습니다.
Amias

systemctl을 실행하면 "postgresql@9.5-main.service로드 실패 실패 PostgreSQL 클러스터 9.5-main"이 반환됩니다. 왜 실패 했습니까?
mike927

이 경우 제대로 작동하지 않는 시스템화 된 시작 스크립트이므로 조언이 정확하게 도움이되지 않습니다.
Tilman

1

또 다른 "이것에 물렸다".

pg_upgradecluster실제로 5432 포트에서 포트 5433 및 소스 버전 (9.5)의 "수동"모드에서 대상 버전 (96)를 떠났다.

후에도 pg_dropcluster 9.5. start.conf 파일을 편집해도 도움이되지 않았지만 systemctl daemon-reload생성기는이 구성 파일을 기반으로 서비스 파일을 심볼릭 링크할지 여부를 결정하므로 힌트를 사용하는 것이 좋습니다 .

for conf in /etc/postgresql/*/*/postgresql.conf; do
    # trimmed for brevity
    [ "$start" = "auto" ] || continue
    ln -s "$pgservice" "$wantdir/postgresql@$version-$cluster.service"
done

따라서 시작하려는 클러스터의 start.conf에 "auto"라는 단어가없는 경우 시스템을 다시로드 (또는 재부팅)하여 부팅시 활성화해야합니다.

여전히 재부팅으로 이것을 확인해야하지만 위의 문제가 있다고 확신합니다.


1

다음과 같이 마술 "슈퍼 서비스"를 비활성화했습니다.

root@server# systemctl disable postgresql

그런 다음 구체적인 서비스를 활성화했습니다.

root@server:~# systemctl enable postgresql@9.5-main.service 

재부팅 후 모든 것이 다시 작동했습니다.


0

같은 오류, 시간 낭비, 간단한 해결책이있었습니다. 이 SO 질문 과 내 대답을 확인하십시오 .

sudo service postgresql restart

0

디렉토리 권한이라는 다른 이유로 인해이 문제가 발생했습니다. 나는 다음과 같이 완전 청소 chmod를 가졌다.

chmod -R 644 /etc/postgresql/10/main

이것은 디렉토리를 실행 불가능으로 설정하여 postgres가 읽을 수 없도록합니다.


0

ssl-cert-snakeoil.key permission에서 발견 된 문제를 확인할 때 동일한 문제가 발생했습니다.

소유권 설정

chown root : ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key

깨끗하게 다시 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.