当前位置: 首页>>技术教程>>正文


postgresql – 如何很好地停止所有 postgres 进程

问题描述

当您不记得数据库目录是什么,也没有定义 PGDATA 环境变量时,如何使用 pg_ctl(或其他方式)很好地停止所有 postgres 进程?

最佳办法

可以安全地:

sudo pkill -u postgres

这会终止以用户 postgres 身份运行的所有进程。或者:

pkill postgres

这会杀死所有名为 ‘postgres’ 的进程。

不要使用 kill -9 ( kill -KILL )。只是 kill (没有选项)做一个 SIGTERM ,这就是你想要的。

或者,如果可以连接到 PostgreSQL,则可以检查 pgdata 位置。例如:

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   

它的数据目录通常会显示在它的命令行上。

次佳办法

在同一个命令中看到 kill 和 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 传递给 pg_ctl 的 -D 参数,然后它将以有序的方式停止数据库。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13459.html,未经允许,请勿转载。