tüm postgres süreçlerini güzel bir şekilde durdurmak


33

pg_ctlVeri tabanı dizininin ne olduğunu hatırlamadığınızda veya PGDATA ortam değişkenini tanımladığınızda, tüm postgres işlemlerini (veya başka şekilde) güzel bir şekilde nasıl durdurabilirsiniz ?

Yanıtlar:


58

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) SIGTERMyapmak 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]/environps -fHC postgrespostgres

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.


3

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ı .psqlrcdosyayı 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/datasonra düzenli bir şekilde veritabanı durur pg_ctl ait -D bağımsız değişken için.


1
Sanırım, eğer bu resmi olarak çalışmaksa, bu doğru cevap olmalı. Yeni bir seçenek mi?
matt

Bu çözüm, 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ı.
Stephane

show data_directorybir 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.
dland,

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.