在 PostgreSQL 中显示连接

Shihab Sikder 2023年1月30日 2022年5月14日
  1. PostgreSQL 中连接/查询的状态
  2. 在 PostgreSQL 中删除数据库
在 PostgreSQL 中显示连接

pg_stat_activity 是一个数据库视图。该视图是一个虚拟表,出于安全原因使用它。

它基于数据库中的一个或多个表存储查询,而不是重复编写相同的查询。

PostgreSQL 中连接/查询的状态

pg_stat_activity 显示与当前活动相关的信息。pg_stat_activity 中有一个列类型列表。

其中,所有都不是必需的。假设你想查看 psql 中的活动连接。

因此,你可以运行以下命令。

SELECT
    pid
    ,datname
    ,usename
    ,application_name
    ,client_hostname
    ,client_port
    ,backend_start
    ,query_start
    ,query
    ,state
FROM pg_stat_activity
WHERE state = 'active';

输出:

postgres-# WHERE state = 'active';
  pid  | datname  | usename  | application_name | client_hostname | client_port |        backend_start         |          query_start          |          query          | state
-------+----------+----------+------------------+-----------------+-------------+------------------------------+-------------------------------+-------------------------+--------
 24256 | postgres | postgres | psql             |                 |        1068 | 2022-04-02 16:03:07.20189+06 | 2022-04-02 16:03:10.382665+06 | SELECT                 +| active
       |          |          |                  |                 |             |                              |                               |     pid                +|
       |          |          |                  |                 |             |                              |                               |     ,datname           +|
       |          |          |                  |                 |             |                              |                               |     ,usename           +|
       |          |          |                  |                 |             |                              |                               |     ,application_name  +|
       |          |          |                  |                 |             |                              |                               |     ,client_hostname   +|
       |          |          |                  |                 |             |                              |                               |     ,client_port       +|
       |          |          |                  |                 |             |                              |                               |     ,backend_start     +|
       |          |          |                  |                 |             |                              |                               |     ,query_start       +|
       |          |          |                  |                 |             |                              |                               |     ,query             +|
       |          |          |                  |                 |             |                              |                               |     ,state             +|
       |          |          |                  |                 |             |                              |                               | FROM pg_stat_activity  +|
                       | WHERE state = 'active'; |
(1 row)


postgres=#

有列类型列表。其中一些我们在上面的 SQL 命令中使用。

这是表中的描述。

列名 描述
datname 数据库名称
application_name 连接到此后端的应用程序。
client_host-name 对于 localhost,它将是空白的,但会有一个用于远程连接的主机名。
client_port 客户端用于与后端通信的 TCP 端口。
backend_start 此时间戳显示客户端何时连接。
query_start 此时间戳显示此查询何时开始。如果数据库被禁用,它将显示上次查询的开始时间。
query 此文本显示实际查询。
status 这显示了数据库的状态。

这是所有列名和有关它的详细信息。此外,你可以从该官方文档中找到所有观点。

在 PostgreSQL 中删除数据库

删除数据库的一般命令如下所示。

DROP DATABASE [IF EXISTS] <database_name>;

但是当你与数据库建立活动连接时,可能会出现问题。在这种情况下,你需要执行以下操作。

  1. 首先,检查数据库是否处于活动状态。使用以下查询,你可以查看特定数据库的所有详细信息。

    SELECT *
    FROM pg_stat_activity
    WHERE datname = <name of the database>;
    
  2. 然后,你需要杀死那个数据库的进程。假设你有一个名为 Shop 的活动数据库。

    现在让我们终止该数据库的进程。

    SELECT pg_terminate_backend (pid)
    FROM pg_stat_activity
    WHERE pg_stat_activity = 'Shop';
    

    现在,你已成功终止该过程。

  3. 执行 DROP 命令,如下所示。

    DROP DATABASE Shop
    

通过执行这些步骤,你应该能够删除任何活动的数据库。

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

相关文章 - PostgreSQL Connection