Ответы:
Это безопасно:
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]/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
Его 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';