Postgresql sunucusu başlamıyor


14

[Ubuntu 16.04] Bağımlılıklar ile birlikte postgresql 9.5'i kurdum:

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

Ne zaman koşmak istiyorum psqlsonra olsun:

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

Ama /var/run/postgresql/boş. Ben posgresql yeniden başlattığınızda her şey iyi görünüyor:

$ /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)

ama eğer ps auxböyle bir PID olmadığını kontrol edin (neden ??)

Toplam eski haline getirme hiç yardımcı olmuyor. Nasıl düzeltebilirim?


/Var/log/posgtresql/postgresql-9.5-main.log dosyası ne gösteriyor?
ubfan1

bu dosya boş
mike927

Yanıtlar:


15

Bu, PostgreSQL'in Xenial'a sistemd entegrasyonunun bir tanımlamasıdır.

Postgresql-ortak paketi tarafından kurulan postgresql servis birimi, sadece postgresql@9.6-main hizmetinin bağımlılık yoluyla başlatılmasına neden olan sahte bir hizmettir. Bu bağımlılığı şu komutu çalıştırarak görebilirsiniz:

systemctl list-dependencies postgresql

Bu bağımlılık kalıcı değildir, ancak /lib/systemd/system-generators/postgresql-generatorpostgresql-ortak paketi ile birlikte gelen systemd üreticisi tarafından sistem önyüklemesi sırasında üretilir . Oluşturucu, dosyadaki başlangıç ​​modunun /etc/postgresql/9.6/main/start.confayarlanıp ayarlanmadığını denetler autove varsa, daha sonra 9.6-main örneğinin başlatılmasına neden olan bağımlılığı ayarlar.

(Daha doğrusu, tüm yapılandırma alt dizinlerini kontrol eder /etc/postgresql/*/*ve otomatik başlatma için yapılandırılmış tüm örnekler için bağımlılıklar oluşturur , ancak varsayılan kurulumda yalnızca bir örnek olacaktır.)

Systemd jeneratörlerinin sınırlamaları nedeniyle (bkz. man systemd.generator) Bu işlem başarısız olabilir ve yeniden başlatma sonrasında bağımlılıkların yok olmasına neden olabilir. Systemd daha sonra yalnızca kukla hizmeti başlatır ve

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

ancak başka hiçbir şey yapmıyorum. Hizmeti manuel olarak başlatmaya çalışmak

systemctl start postgresql

sadece bu sonucu yeniden üretecek. Komutu çalıştırma

systemctl daemon-reload

manuel olarak root jeneratörü yeniden çalıştırır ve çoğu durumda sorunu bir sonraki yeniden başlatmaya kadar düzeltir.

Sorunu kalıcı olarak çözmek için, önyükleme sırasında jeneratörün neden başarısız olduğunu bulmanız gerekir. Olası nedenler systemd.generator kılavuzunda bulunabilir. Benim durumumda /etc/postgresql/9.6/main/postgresql.conf, jeneratör önyükleme sırasında erken çalıştığında henüz mevcut olmayan farklı bir dosya sistemine bağlanan PostgreSQL yapılandırma dosyasıydı . postgresql-generatoraksi halde ihtiyaç duymasa bile bu dosyanın varlığını kontrol eder.


Sorunu çözmeyi
fırtına

9

Tilman'ın cevabını genişletmek, ancak yorum yapmak için yeterli Kudos yok ...

Hizmetin postgresql olarak adlandırılmasına ve sarıcı kukla hizmetini önemsemiyorsanız, sadece gerçek hizmeti doğrudan kontrol etmek için çalışmalıdır. Adı: postgresql@$version-$cluster.service Sizin durumunuzda kısaca postgresql-9.5-main olmalıdır . Başlamak ister

systemctl start postgresql@9.5-main

ve durdurmak için:

systemctl stop postgresql@9.5-main

Durum ayrıca, otomatik oluşturulan sarmalayıcı hizmetinden çok daha iyi ve doğru bilgi verir.

systemctl status postgresql@9.5-main

9.6 için şöyle görünür:

● 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

Benim durumumda bu, yanlış yapılandırılmış yerel ayarlarla ilgiliydi.

Bu dba.stackexchange.com yanıtında çözüm buldum :

  1. sudo dpkg-reconfigure localesGerekli yerel ayarları oluşturmak için kullanın
  2. Var olan veritabanı kümesini bırakın sudo pg_dropcluster 9.5 main(bu kümedeki tüm verileri silecektir!)
  3. Kümeyi şu yolla yeniden oluşturun: sudo pg_createcluster 9.5 main --start
  4. PostgreSQL'i yeniden başlatın sudo service postgresql restart

1

ubuntu 16.04 ile systemd başlangıç ​​komut dosyalarını kullanmak daha iyi olur, init komut dosyaları bu günlerde düzgün çalışmayabilir. Postgres 9.5 zaten ubuntu depolarında, bu yüzden bunun yerine systemd başlangıcı olması gerektiğini deneyin.


standart ubuntu repo kullanarak aynı sonucu
alıyorum

Bu bir utanç, postgres millet henüz systemd asmak var gibi görünüyor. Muhtemelen postgres paketine karşı bir hata oluşturmalı veya posta listelerinde systemd desteği hakkında soru sormalısınız. Postgres'i çok kullanmıyorum, ancak bazı açık kaynaklı projeler sistemd'e karşı bir tutum sergiledi veya belki de onu destekleme konusundaki iç tartışmalara karıştı.
Amias

systemctl çalıştırdığınızda "postgresql@9.5-main.service yüklenen başarısız PostgreSQL Cluster 9.5-main" döndürür. Neden başarısız oldu?
mike927

Bu durumda, düzgün çalışmayan sistemd başlangıç ​​komut dosyalarıdır, bu nedenle tavsiye tam olarak yardımcı olmaz.
Tilman

1

Başka bir "bundan ısırıldı".

pg_upgradeclusterAslında limanda 5432 de port 5433 ve kaynak sürümü (9.5) üzerinde "manuel" modunda hedef sürümü (9.6) ayrıldı.

Sonra bile pg_dropcluster 9.5. Start.conf dosyasının düzenlenmesi yardımcı olmadı, ancak ipucu kullanmaktı systemctl daemon-reload, çünkü jeneratör hizmet dosyasını sembolik olarak bağlamak isteyip istemediğinize karar verir:

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

Bu nedenle, başlatmak istediğiniz kümenin start.conf dosyasında "auto" sözcüğü yoksa, önyükleme sırasında etkinleştirilmesi için bir sistem yeniden yüklemesi (veya yeniden başlatma) yapmanız gerekir.

Yine de bir yeniden başlatma ile doğrulamak zorunda, ancak yukarıdaki sorun oldukça emindi.


1

Böyle sihirli "süper hizmet" devre dışı:

root@server# systemctl disable postgresql

Sonra somut hizmeti etkinleştirdim:

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

Yeniden başlattıktan sonra her şey tekrar çalıştı.


0

Aynı hatayı vardı, saatlerce boşa, basit bir çözüm. Bu SO sorusunu ve cevabımı kontrol edin , Hangisi:

sudo service postgresql restart

0

Farklı bir nedenden dolayı bu sorun vardı: dizin izinleri. Ben böyle bir süpürme chmod vardı:

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

Bu, dizini yürütülebilir olmayan olarak ayarlar;


0

Aynı sorunu ssl-cert-snakeoil.key izinde bulunan sorunu kontrol ettikten sonra da yaşadım.

Sahipliği Ayarla

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

ve temiz bir yeniden başlatma yaptı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.