как прекратить все процессы postgres

Как вы прекрасно останавливаете все процессы postgres с помощью pg_ctl (или иначе), когда вы не помните, что такое каталог базы данных , а также не определена переменная среды PGDATA?

22 голоса | спросил matt 9 72014vEurope/Moscow11bEurope/MoscowSun, 09 Nov 2014 11:24:26 +0300 2014, 11:24:26

2 ответа


41

Безопасно:

sudo pkill -u postgres

(убивает все procs, выполняющиеся как пользователь postgres) или

pkill postgres

(убивает все procs с именем postgres)

Использовать не kill -9 (kill -KILL). kill без параметров делает SIGTERM, который это то, что вы хотите.

В качестве альтернативы вы можете проверить местоположение pgdata, если вы можете подключиться к Pg, например.

sudo -u postgres psql -c "SHOW data_directory";

... или путем проверки его переменных среды в /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 обычно указывается в командной строке.

ответил Craig Ringer 9 72014vEurope/Moscow11bEurope/MoscowSun, 09 Nov 2014 12:55:46 +0300 2014, 12:55:46
2

Это заставляет меня нервничать, наблюдая за убийством и postgres в той же команде. Чтобы ответить на вопрос, используя только pg_ctl, это будет:

pg_ctl -D $(psql -Xtc 'show data_directory') stop

В аргументе -X игнорируется файл .psqlrc. Это полезно, если у вас настроен psql, чтобы исправить время, затраченное на запрос (с помощью команды \ timing).

Аргумент -t говорит, чтобы удалить имя столбца в верхней части вывода и общее количество созданных строк.

Аргумент -c содержит исполняемый код SQL.

Запуск голого psql -c 'show data_directory', вероятно, приведет к следующему выводу:

      data_directory
--------------------------
 /path/to/postgresql/data
(1 row)

Следовательно, обратная ссылка через $( ... ) будет поставляться /path/to/postgresql/data в аргумент -D pg_ctl, который затем остановит базу данных упорядоченным образом.

ответил dland 30 Maypm18 2018, 12:00:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132