[Ubuntu 16.04] Saya menginstal postgresql 9.5 bersama dengan dependensi:
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
Ketika saya ingin menjalankan psql
maka saya mendapatkan:
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"?
Tetapi /var/run/postgresql/
kosong. Ketika saya me-restart posgresql, semuanya tampak baik-baik saja:
$ /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)
tetapi jika periksa ps aux
tidak ada PID seperti itu (mengapa ??)
Pemasangan ulang total tidak membantu sama sekali. Bagaimana saya bisa memperbaikinya?
postgresql
mike927
sumber
sumber
Jawaban:
Ini adalah keistimewaan dari integrasi systemd dari PostgreSQL di Xenial.
Unit layanan postgresql yang diinstal oleh paket umum postgresql hanyalah layanan dummy yang menyebabkan layanan [email protected] utama harus dimulai melalui dependensi. Anda dapat melihat ketergantungan itu dengan menjalankan perintah
Ketergantungan itu tidak permanen, tetapi dihasilkan selama boot sistem oleh generator systemd
/lib/systemd/system-generators/postgresql-generator
yang juga datang dengan paket postgresql-common. Generator memeriksa apakah mode startup dalam file/etc/postgresql/9.6/main/start.conf
diatur keauto
, dan jika demikian, mengatur dependensi yang kemudian menyebabkan instance 9.6-main untuk dimulai.(Lebih tepatnya, ia memeriksa semua subdirektori konfigurasi
/etc/postgresql/*/*
dan akan membuat dependensi untuk semua instance yang dikonfigurasikan untuk startup otomatis, tetapi dalam instalasi default hanya akan ada satu instance.)Karena keterbatasan generator systemd (lihat
man systemd.generator
) proses ini mungkin gagal, menyebabkan dependensi tidak ada setelah reboot. Systemd kemudian hanya akan memulai layanan boneka, menuliske log tetapi tidak melakukan apa-apa. Mencoba memulai layanan secara manual dengan
hanya akan mereproduksi hasil itu. Menjalankan perintah
secara manual sebagai root akan menjalankan kembali generator dan dalam banyak kasus memperbaiki masalah sampai reboot berikutnya.
Untuk menyelesaikan masalah secara permanen, Anda harus menemukan alasan mengapa generator gagal saat boot. Kemungkinan penyebabnya dapat ditemukan di halaman systemd.generator. Dalam kasus saya, itu adalah file konfigurasi PostgreSQL
/etc/postgresql/9.6/main/postgresql.conf
yang dikaitkan dengan sistem file yang berbeda yang belum tersedia ketika generator berjalan lebih awal saat boot.postgresql-generator
memeriksa keberadaan file itu meskipun sebenarnya tidak memerlukannya.sumber
Memperluas jawaban Tilman, tetapi tidak cukup pujian untuk berkomentar ...
Jika Anda tidak memerlukan layanan yang disebut postgresql dan tidak peduli dengan layanan dummy pembungkus, itu harus bekerja hanya untuk mengontrol layanan nyata secara langsung. Namanya adalah: postgresql@$version-$cluster.service Dalam kasus Anda, seharusnya postgresql-9.5-main singkatnya. Ingin memulai
dan untuk berhenti:
Status juga akan memberi Anda informasi yang jauh lebih baik dan akurat daripada pada layanan pembungkus otomatis.
Untuk 9,6 terlihat seperti ini:
sumber
Dalam kasus saya ini terkait dengan lokal yang tidak dikonfigurasi dengan benar.
Saya telah menemukan solusi dalam jawaban dba.stackexchange.com ini :
sudo dpkg-reconfigure locales
untuk menghasilkan lokal yang diperlukansudo pg_dropcluster 9.5 main
(ini akan menghapus semua data dalam cluster!)sudo pg_createcluster 9.5 main --start
sudo service postgresql restart
sumber
lebih baik menggunakan skrip startup systemd dengan ubuntu 16.04, skrip init mungkin tidak berfungsi dengan baik hari ini. Postgres 9.5 sudah ada di dalam repositori ubuntu jadi cobalah itu, semestinya memiliki startup systemd.
sumber
Lain "digigit oleh ini".
The
pg_upgradecluster
benar-benar meninggalkan versi target (9,6) dalam mode "manual" pada port 5433 dan versi source (9,5) di pelabuhan 5432.Bahkan sesudahnya
pg_dropcluster 9.5
. Mengedit file start.conf tidak membantu, tetapi petunjuknya adalah untuk digunakansystemctl daemon-reload
, karena generator memutuskan berdasarkan pada file konfigurasi ini apakah akan menyinkronkan file layanan:Jadi jika cluster yang ingin Anda mulai tidak memiliki kata "auto" di start.conf, Anda perlu melakukan sistem-reload (atau reboot) untuk mengaktifkannya pada saat boot.
Masih harus memverifikasi ini dengan reboot, tetapi mengingat hal di atas cukup percaya diri yang menjadi masalah.
sumber
Saya menonaktifkan "layanan super" ajaib seperti ini:
Kemudian saya mengaktifkan layanan beton:
Setelah mem-boot semuanya kembali berfungsi.
sumber
Punya kesalahan yang sama, jam terbuang, solusi sederhana. Lihat pertanyaan SO ini dan jawaban saya, Yaitu:
sumber
Saya punya masalah ini karena alasan berbeda: izin direktori. Saya memiliki chmod lengkap seperti ini:
Ini menetapkan direktori sebagai tidak dapat dieksekusi, yang mencegah postgres membacanya.
sumber
Saya memiliki masalah yang sama saat memeriksa masalah yang ditemukan dengan izin ssl-cert-snakeoil.key.
Tetapkan Kepemilikan
chown root: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key
dan melakukan restart bersih.
sumber