终止 PostgreSQL 连接
-
使用
ps -ef
或grep
查看和终止 PostgreSQL 中的进程 -
PostgreSQL 基本
TERMINATE_BACKEND()
函数 -
LINUX 中的 PostgreSQL 连接
RESTART
- UBUNTU 中的 pg_ctl restart 用于终止预先存在的 PostgreSQL 会话
我们将在本文中学习如何终止 PostgreSQL 会话。任何打开的连接都通过后台进程或任务运行,尽管退出用户界面或命令行工具 PSQL
,这些进程或任务可能不再存在。
使用 ps -ef
或 grep
查看和终止 PostgreSQL 中的进程
让我们看看我们如何发出这些命令来杀死当前访问 PostgreSQL 会话的所有进程。Linux 系统使用 PIPE
使附加的命令有意义然后工作。
让我们将上面的命令分为两种不同的语法; ps
和 grep
。正如 LINUX 手册中定义的那样,ps
用于查看我们系统的所有正在运行和可用的进程。
语法:
ps [options]
OPTIONS
包括以下内容。
Use the standard syntax to see every process on the system:
ps -e
ps -ef
ps -eF
ps -ely
我们没有在此选项列表中添加更多可用选项,因为我们目前想要查看 -ef
关键字。使用上述任何一种方法都可以使命令正常工作。
因为我们使用 grep
对其进行管道化,从而为我们带来匹配特定模式的结果,所以它在 MANPAGES
中作为一个子句列出,用于打印匹配特定模式的行。
语法:
grep [OPTION...] PATTERNS [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]
grep
在 FILE
中搜索模式。有时可能不是文件而是文件索引。
文件索引在 Linux 系统中很常见,它可以指示标准输入、打开的文件或从某个命令显示的一组结果。
在上面的例子中,我们获取了 Linux 系统中所有当前进程的集合,然后从这个集合中获取匹配 PostgreSQL 关键字或附加到 PostgreSQL 的进程的结果。
因此,我们可以使用 kill
命令终止进程,其 ID
显示在我们的结果中。该命令将信号传递给指定要终止的进程。
命令:
int kill(pid_t pid, int sig);
在 pid
中,你将 Process-ID
作为参数传递。这是杀死当前可能正在执行的 PostgreSQL 进程、任务和查询的有效方法。
我们可以使用下面的命令来杀死曾经发现的似乎是我们的 PostgreSQL 会话的进程。
命令:
SUDO KILL -9 $(lsof -i :3000 -t) or '#' (The former depends on MacOSX)
SUDO KILL -9
不适合,因为它无法清除系统中进程访问和留下的临时文件并重置其终端连接。该进程也不能删除与它当前使用或附加的套接字的连接。
代替 -9
,你可以发出 -15
或 -2
或 -1
,完全可以替代 -9
关键字。
kill
使用如下语法。
kill [-signal|-s signal|-p] [-q value]
要查看它是否完美运行,你可以从以下返回的结果中进行检查。
0 success
1 failure
64 partial success (when more than one process is specified)
PostgreSQL 基本 TERMINATE_BACKEND()
函数
上面提供的解决方案仅适用于 Linux 系统及其版本。但是,我们有通用的解决方案,可能适用于在各种操作系统上运行的 PostgreSQL 会话。
在 PostgreSQL 中定义的 System Administration
函数下,一组 Server Signaling
函数在成功和失败时返回 True
或 False
,并将控制信号发送到提及或选择的进程。
如文档中所列,这些函数默认情况下仅限于超级用户,但可以使用 GRANT
将访问权限授予其他人,但有注明的例外情况。
最好以 SUPERUSER
身份访问数据库以使用此类命令。要调用此函数,你可以编写以下查询。
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE
pid != pg_backend_pid() AND datname = '[your_Database_name]'
PG_STAT_ACTIVITY
是活动后端中进程的视图。而 PID
是该表(视图)中的一列。然后我们将 PID
与我们的 BACKGROUND_PID
进行比较。
我们不能终止我们当前的 PostgreSQL 会话,因为它负责杀死所有并发和预先存在的 PostgreSQL 连接。
作为替代方案,你也可以使用 PG_CANCEL_BACKEND(pid)
,因为它们都将 SIGINT
和 SIGTERM
发送到提到的后台进程。
这些信号是具有更严格实现的 KILL
信号。在系统信息
功能下,你将能够找到 PG_BACKEND_PID()
,其使用说明如下。
pg_backend_pid() int Process ID of the server process attached to the current session
确保不要意外终止我们当前的会话。在旧版本的 PostgreSQL 中,你可以使用 PROCPID
而不是 PID
。
LINUX 中的 PostgreSQL 连接 RESTART
我们可以使用 RESTART
关键字来终止连接到 PostgreSQL 会话的所有连接。如介绍中所述,我们可以从 Windows 中的任务管理器中杀死后台进程,或者完全重新启动我们的系统以终止所有由于效率低下而不适合的连接。
命令 - 在 Linux 中:
sudo service postgresql restart
而对于 BREW
,HOMEBREW
的缩写,一种从 LINUX 命令行安装软件包的工具。
命令 - 在 Linux 中:
brew services restart postgresql
如果使用 BREW
安装 PostgreSQL,这将起作用。
UBUNTU 中的 pg_ctl restart 用于终止预先存在的 PostgreSQL 会话
在 UBUNTU MAN PAGES
中,你可以看到 PG_CTL
,它初始化、启动、停止或控制 PostgreSQL 会话。控制也可以包括 RESTART
。
语法:
pg_ctl restart [-w] [-t seconds] [-s] [-D datadir] [-c]
[-m s[mart] | f[ast] | i[mmediate]] [-o options]
为简单起见,我们可以发出包含 Postgres 的目录名称,然后运行以下命令。
pg_ctl restart -D /usr/local/var/postgres
如果你的目录与上面给出的目录不同且不同,你可以使用下一个命令找到它们。
ps aux | grep postgres
要了解此命令,你可以参考本教程提供的第一个解决方案中详细解释的类似命令之一。有时,你可能需要使用 LAUNCHCTL
命令来启用命令行上的子命令,这些子命令可能来自标准输入。
命令:
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
再一次,如果找不到 HOMEBREW``PLIST
的 DIR
,你可以再次运行 AUX
命令。
我们希望你了解我们可以在不同操作系统中终止或终止 PostgreSQL 连接的各种方法。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub