Yanıtlar:
Bu güvenlidir:
sudo pkill -u postgres
Bu kullanıcı olarak çalışan tüm işlemleri öldürür postgres
. Veya:
pkill postgres
Bu 'postgres' adlı tüm işlemleri öldürür.
Do not kullanmak kill -9
( kill -KILL
). Sadece kill
(seçeneksiz) SIGTERM
yapmak istediğin şey budur.
Alternatif olarak, PostgreSQL'e bağlanabiliyorsanız pgdata konumunu kontrol edebilirsiniz. Örneğin:
sudo -u postgres psql -c "SHOW data_directory";
... veya postacı ile tanımladığınız ortam değişkenlerini kontrol ederek . Diğer işlemlerin ebeveyni olanı arayın . Örneğin:/proc/[postmaster pid]/environ
ps -fHC postgres
postgres
postgres 794 1 0 Nov06 ? 00:00:03 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data -p 5432
postgres 857 794 0 Nov06 ? 00:00:00 postgres: logger process
postgres 871 794 0 Nov06 ? 00:00:00 postgres: checkpointer process
postgres 872 794 0 Nov06 ? 00:00:00 postgres: writer process
postgres 873 794 0 Nov06 ? 00:00:00 postgres: wal writer process
postgres 874 794 0 Nov06 ? 00:00:03 postgres: autovacuum launcher process
postgres 875 794 0 Nov06 ? 00:00:07 postgres: stats collector process
Datadir genellikle komut satırında gösterilecektir.
Aynı komutta öldürmeyi ve postgres'i görünce beni tedirgin ediyor. Soruyu yalnızca kullanarak yanıtlamak için pg_ctl
, bu:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
-X argümanı .psqlrc
dosyayı görmezden geldiğini söylüyor . Bu, bir sorgu tarafından harcanan zamanı (\ timing komutu ile) göndermek için yapılandırılmış psql'niz varsa kullanışlıdır.
-T argümanı çıktının üstündeki sütun adını ve üretilen toplam satır sayısını kaldırmayı söylüyor.
-C argümanı yürütülecek SQL kodunu içerir.
Çıplak koşmak psql -c 'show data_directory'
muhtemelen aşağıdaki çıktıları üretecektir:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Bu nedenle, bu through backticking $( ... )
teslim edecek /path/to/postgresql/data
sonra düzenli bir şekilde veritabanı durur pg_ctl ait -D bağımsız değişken için.
PGDATA
çevre değişkeni kullanımının yanı sıra, kullanılan seçeneklerin açıklanmasından da fayda sağlayacaktır . Bu komutu çalıştırma denemem, Linux kullanıcı adımın altında böyle bir veritabanı olmadığı için başarısızlıkla sonuçlandı.
show data_directory
bir veritabanı belirtilmeden çalıştırılabilir ve gerçekten de hiçbir sunucumun ismimde bir veritabanı yoktur. Ayrıca PGDATA gerektirmez, bu yüzden başarısızlığınızı açıklamak için bir zararım var.
Bu iş benim için ref. https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';