Ответы:
Это безопасно:
sudo pkill -u postgres
Это убивает все процессы, запущенные от имени пользователя postgres
. Или:
pkill postgres
Это убивает все процессы, называемые «postgres».
Как не использовать kill -9
( kill -KILL
). Просто kill
(без вариантов) делает то SIGTERM
, что вы хотите.
Кроме того, вы можете проверить расположение pgdata, если вы можете подключиться к PostgreSQL. Например:
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
Его dadadir обычно отображается в командной строке.
Это заставляет меня нервничать, когда я вижу kill и postgres в одной команде. Чтобы ответить на вопрос, используя только pg_ctl
, это было бы:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
Аргумент -X говорит, что нужно игнорировать .psqlrc
файл. Это полезно, если у вас есть psql, настроенный на выдачу времени, затраченного на запрос (с помощью команды \ timer).
Аргумент -t говорит об удалении имени столбца в верхней части вывода и общего количества произведенных строк.
Аргумент -c содержит код SQL для выполнения.
Запуск голого psql -c 'show data_directory'
, вероятно, приведет к следующему выводу:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Следовательно, обратная галочка через это $( ... )
приведет /path/to/postgresql/data
к аргументу -D в pg_ctl, который затем упорядоченно остановит базу данных.
PGDATA
переменной среды. Моя попытка запустить эту команду привела к сбою, так как не было такой базы данных под моим именем пользователя Linux.
show data_directory
может быть запущен без указания базы данных, и на самом деле ни один из моих серверов не имеет базы данных на мое имя. И при этом это не требует PGDATA, таким образом, я затрудняюсь объяснить Ваш отказ.
Эта работа для меня реф. https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';