Navicat Blog

使用 Navicat 17 擴展 PostgreSQL 資料類型 2025 年 1 月 17 日,由 Robert Gravelle 撰寫

列舉類型

在這個關於使用 Navicat Premium 17 在 PostgreSQL 中建立自訂資料類型的系列中,我們到目前為止已經探索了幾個選項。在 第 1 部分 中,我們學習了如何為免費 DVD 租賃資料庫 建立自訂網域。而上週,我們建立了一個複合類型來從使用者定義的函式傳回複雜的資料。今天的文章將介紹列舉類型(Enumerated Type),這類型限制值為一組預定義的選項。

ENUM 類型的概覽

列舉類型(ENUM)允許我們定義一個具有靜態、有序值集的資料類型。這在欄位必須包含一組預定義值中的一個時非常有用。

與其他 PostgreSQL 類型一樣,ENUM 類型是使用 CREATE TYPE 陳述式建立的。以下是定義四種使用者狀態的 ENUM 範例:

CREATE TYPE user_status AS ENUM ('active', 'inactive', 'suspended', 'pending');

以下是另一個定義電影評級的 ENUM 範例:

CREATE TYPE movie_rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');

當自訂類型定義完成後,我們可以在資料表中使用它,如下所示:

CREATE TABLE films (
  film_id SERIAL PRIMARY KEY,
  title VARCHAR(255),
  rating movie_rating
);

在 Navicat 17 中建立列舉類型

定義列舉類型的一種更簡單的方法是使用 Navicat 的 GUI 工具。你可以在 Navicat Premium 17Navicat for PostgreSQL 17 中找到它們。若要存取「類型」工具,只需按一下主工具列中的「其他」按鈕,然後從下拉式清單中選取「類型」:

type_menu_command (33K)

這會開啟「物件」窗格,在那裡我們可以看到現有類型的清單。若要建立新類型,請按一下「物件」工具列中「新增類型」項目旁的箭頭,然後從選單中選取「列舉」項目:

enum_menu_item (38K)

這會在新索引標籤中啟動類型設計器。在「一般」索引標籤上將有一個空白單元格,我們可以在其中輸入列舉的第一個標籤,即「G」:

enum_type_label (21K)

我們可以按一下「新增標籤」來新增一行以輸入下一個標籤。輸入所有標籤後,「一般」索引標籤應該如下所示:

completed_type_labels (25K)

在按下「儲存」按鈕之前,我們可以按一下「SQL 預覽」標籤來查看 Navicat 產生的陳述式:

enum_type_sql_preview (19K)

請注意,類型名稱為「未命名」,因為我們尚未儲存定義。這是正常的。

按下「儲存」按鈕後,我們會看到一個「另存為」對話方塊,我們可以在那裡輸入類型名稱「film_ rating」:

enum_type_save_as_dialog (34K)

在資料表定義中使用 film_ rating 類型

現在我們可以像其他 PostgreSQL 資料類型一樣使用「film_ rating」類型。例如,我們可以將資料表欄位設定為我們的自訂類型。我們甚至可以變更現有資料表的類型,前提是其資料值符合我們的列舉值。事實上,將欄位的類型從通用 VARCHAR 變更為更嚴格的 ENUM 是一種快速確定欄位是否有無效值的有效方法。

如果我們在 Navicat 資料表設計器中開啟「film」資料表,我們可以將「rating」欄位設置為我們的「film_rating」類型,從「類型」下拉式清單中選取「(Type)」,然後將「物件類型」設定為「film_rating」:

film_table_with_enum_type (119K)

同時確保「定序」欄位為空。

如果該欄位沒有任何無效值,我們應該能夠儲存資料表定義,而不會出現任何錯誤或警告。

將欄位類型設為 ENUM 的優點之一是 Navicat 將提供一個用於選擇值的下拉式清單:

adding_a_new_row_to_the_film_table (48K)

總結

在今天的文章中,我們使用 Navicat Premium 17 的類型工具建立了一個列舉類型,並更新了現有資料表以利用我們的自訂類型來約束欄位值。在第 4 部分,我們將繼續討論範圍類型。

Navicat Blogs
Feed Entries
Blog Archives
Share