在 PostgreSQL 中顯示連線

Shihab Sikder 2023年1月30日
  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
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