

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 查詢系統資料表和檢視
<a name="t_querying_redshift_system_tables"></a>

除了您建立的資料表外，您的資料倉儲還包含一些系統資料表和檢視。這些系統資料表和檢視包含安裝的相關資訊，以及在系統上執行之各種查詢和程序的相關資訊。您可以查詢這些系統資料表和檢視，以收集資料庫的相關資訊。如需詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的[系統資料表和檢視參考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)。每個資料表或檢視的說明都會指出，所有使用者都可看見資料表或是僅超級使用者才能看見資料表。以超級使用者身分登入，查詢僅超級使用者才能看見的資料表。

## 檢視資料表名稱的清單
<a name="t_querying_redshift_system_tables-view-a-list-of-table-names"></a>

若要檢視結構描述中所有資料表的清單，您可以查詢 PG\$1TABLE\$1DEF 系統目錄資料表。您可以先檢查 `search_path` 的設定。

```
SHOW search_path;
```

結果應類似以下內容，

```
  search_path
---------------
 $user, public
```

下列範例會將 `SALES` 結構描述新增至搜尋路徑，並顯示 `SALES` 結構描述中的所有資料表。

```
set search_path to '$user', 'public', 'sales';
                
SHOW search_path;

      search_path       
------------------------
 "$user", public, sales


select * from pg_table_def where schemaname = 'sales';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

下列範例顯示目前資料庫中所有結構描述名為 `DEMO` 之所有資料表的清單。

```
set search_path to '$user', 'public', 'sales';
select * from pg_table_def where tablename = 'demo';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 public     | demo      | personid | integer                | az64     | f       |       0 | f
 public     | demo      | city     | character varying(255) | lzo      | f       |       0 | f
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

如需詳細資訊，請參閱 [PG\$1TABLE\$1DEF](https://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html)。

您也可以先選擇要連線的資料庫，以使用 Amazon Redshift 查詢編輯器 v2 來檢視指定結構描述中的所有資料表。

## 檢視使用者
<a name="t_querying_redshift_system_tables-view-database-users"></a>

您可以查詢 PG\$1USER 目錄來檢視所有使用者的清單，以及使用者 ID (USESYSID) 和使用者權限。

```
SELECT * FROM pg_user;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 rdsdb      |        1 | true        | true     | true      | ******** | infinity |
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

使用者名稱 `rdsdb` 供 Amazon Redshift 在內部用來執行日常管理和維護任務。您可以將 `where usesysid > 1` 新增至 select 陳述式來篩選您的查詢，以僅顯示使用者定義的使用者名稱。

```
SELECT * FROM pg_user WHERE usesysid > 1;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

## 檢視近期查詢
<a name="t_querying_redshift_system_tables-view-recent-queries"></a>

在前一個範例中，`adminuser` 的使用者 ID (user\$1id) 為 100。若要列出 `adminuser` 最近執行的四個查詢，您可以查詢 SYS\$1QUERY\$1HISTORY 檢視。

您可以使用此檢視來找出最近執行之查詢的查詢 ID (query\$1id) 或處理程序 ID (session\$1id)。您也可以使用此檢視來檢查查詢完成所花費的時間。SYS\$1QUERY\$1HISTORY 包含查詢字串 (query\$1text) 的前 4,000 個字元，可協助您尋找特定查詢。請使用 LIMIT 子句搭配 SELECT 陳述式來限制結果。

```
SELECT query_id, session_id, elapsed_time, query_text 
FROM sys_query_history
WHERE user_id = 100
ORDER BY start_time desc
LIMIT 4;
```

結果類似如下所示。

```
 query_id |  session_id  |  elapsed_time |   query_text
----------+--------------+---------------+----------------------------------------------------------------
 892      |    21046     |       55868   | SELECT query, pid, elapsed, substring from ...
 620      |    17635     |     1296265   | SELECT query, pid, elapsed, substring from ...
 610      |    17607     |       82555   | SELECT * from DEMO; 
 596      |    16762     |      226372   | INSERT INTO DEMO VALUES (100);
```

## 判斷執行中查詢的工作階段 ID
<a name="determine_pid"></a>

若要擷取有關該查詢的系統資料表資訊，您可能需要指定與該查詢相關聯的工作階段 ID (處理程序 ID)。或者，您可能需要尋找仍在執行之查詢的工作階段 ID。例如，如果需要取消佈建叢集上執行時間過久的查詢，則需要工作階段 ID。您可以查詢 STV\$1RECENTS 系統資料表，來取得執行中查詢的工作階段 ID 清單，以及對應的查詢字串。如果您的查詢傳回多個工作階段，則您可以查看查詢文字來判斷需要哪個工作階段 ID。

若要判斷執行中查詢的工作階段 ID，請執行下列 SELECT 陳述式。

```
SELECT session_id, user_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```