как приятно остановить все процессы пост-ГРЭС

Как Вы приятно останавливаете все процессы пост-ГРЭС с pg_ctl (или иначе), когда Вы не вспоминаете то, что каталог базы данных, и при этом переменная среды PGDATA, не определили?

33
задан 9 November 2014 в 11:24

3 ответа

Безопасно:

sudo pkill -u postgres

Это уничтожает все процессы, работающие как пользователь postgres. Или:

pkill postgres

Это уничтожает все процессы, названные 'пост-ГРЭС'.

Не использовать kill -9 (kill -KILL). Просто kill (без опций), делает a 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   

Его datadir будут обычно показывать на его командной строке.

58
ответ дан 16 November 2019 в 11:10

Это делает меня, нервное наблюдение уничтожает и пост-ГРЭС в той же команде. Для ответа на вопрос с помощью только 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)

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

3
ответ дан 16 November 2019 в 11:10

Эта работа для меня касательно https://stackoverflow.com/a/5408501/248616

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';
0
ответ дан 16 November 2019 в 11:10

Другие вопросы по тегам:

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