matanster Asked: 2014-11-10 00:24:26 +0800 CST2014-11-10 00:24:26 +0800 CST 2014-11-10 00:24:26 +0800 CST 如何很好地停止所有 postgres 进程 772 pg_ctl当你不记得数据库目录是什么,也没有定义 PGDATA 环境变量时,你如何很好地停止所有 postgres 进程(或其他方式)? postgresql 4 个回答 Voted Best Answer Craig Ringer 2014-11-10T01:55:46+08:002014-11-10T01:55:46+08:00 可以安全地: sudo pkill -u postgres 这会杀死所有以用户身份运行的进程postgres。或者: pkill postgres 这会杀死所有名为“postgres”的进程。 不要使用( kill -9) kill -KILL。只是kill(没有选项)做 a SIGTERM,这就是你想要的。 或者,如果可以连接到 PostgreSQL,则可以检查 pgdata 位置。例如: 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 它的数据目录通常会显示在它的命令行上。 dland 2018-05-31T01:00:57+08:002018-05-31T01:00:57+08:00 在同一个命令中看到 kill 和 postgres 让我很紧张。要仅使用 来回答问题pg_ctl,那将是: pg_ctl -D $(psql -Xtc 'show data_directory') stop -X 参数表示忽略该.psqlrc文件。如果您将 psql 配置为发出查询所用的时间(通过 \timing 命令),这将很有用。 -t 参数表示删除输出顶部的列名和生成的总行数。 -c 参数包含要执行的 SQL 代码。 运行 barepsql -c 'show data_directory'可能会产生以下输出: data_directory -------------------------- /path/to/postgresql/data (1 row) 因此,反引号$( ... )将传递/path/to/postgresql/data给 pg_ctl 的 -D 参数,然后它将以有序的方式停止数据库。 Nam G VU 2019-11-11T06:10:32+08:002019-11-11T06:10:32+08:00 这对我有用参考。https://stackoverflow.com/a/5408501/248616 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME'; Gino 2022-09-09T22:41:13+08:002022-09-09T22:41:13+08:00 您可以简单地运行命令 systemctl stop postgresql 当你想重新启动它运行 systemctl start postgresql 这些命令很可能会要求您附加sudo
可以安全地:
这会杀死所有以用户身份运行的进程
postgres
。或者:这会杀死所有名为“postgres”的进程。
不要使用(
kill -9
)kill -KILL
。只是kill
(没有选项)做 aSIGTERM
,这就是你想要的。或者,如果可以连接到 PostgreSQL,则可以检查 pgdata 位置。例如:
...或者通过在 中检查其环境变量,您可以在其中识别邮政局长。寻找其他进程的父进程。例如:
/proc/[postmaster pid]/environ
ps -fHC postgres
postgres
它的数据目录通常会显示在它的命令行上。
在同一个命令中看到 kill 和 postgres 让我很紧张。要仅使用 来回答问题
pg_ctl
,那将是:-X 参数表示忽略该
.psqlrc
文件。如果您将 psql 配置为发出查询所用的时间(通过 \timing 命令),这将很有用。-t 参数表示删除输出顶部的列名和生成的总行数。
-c 参数包含要执行的 SQL 代码。
运行 bare
psql -c 'show data_directory'
可能会产生以下输出:因此,反引号
$( ... )
将传递/path/to/postgresql/data
给 pg_ctl 的 -D 参数,然后它将以有序的方式停止数据库。这对我有用参考。https://stackoverflow.com/a/5408501/248616
您可以简单地运行命令
当你想重新启动它运行
sudo