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.