Answers:
安全:
sudo pkill -u postgres
那会杀死以user身份运行的所有进程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
其datadir通常将显示在其命令行上。
在同一命令中看到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参数,然后它将有序地停止数据库。
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';