Navicat 博客

在 Navicat 17 中扩展 PostgreSQL 数据类型 - 第三部分 2025 年 1 月 17 日,由 Robert Gravelle 撰写

枚举类型

Navicat Premium 17 中创建 PostgreSQL 的自定义数据类型的系列中,我们已经探索了多个主题。在 第 1 部分 ,我们学习了如何为 免费 DVD 租赁数据库 创建自定义域。上周,我们创建了一个复合类型,用于从用户定义的函数返回复杂数据。今天的博客将介绍枚举类型,它可以限制一组预定义选项的值。

快速了解枚举类型

枚举类型(ENUMs)允许我们定义一种具有静态、有序值集的数据类型。这对于列必须包含一组有限的预定义值的情况非常有用。

与其他 PostgreSQL 类型一样,枚举类型也是通过 CREATE TYPE 语句创建的。下面是一个定义了四种用户状态的枚举:

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

下面是另一个定义电影分级的例子:

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 中使用相关的基于图形用户界面的工具。你可以在 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”表,我们可以通过从“类型”下拉菜单中选择“(Type)”,将“rating”列设置为我们的“film_rating”类型, 即将“对象类型”设置为“film_rating”,

film_table_with_enum_type (119K)

同时确保“排序规则”项为空。

如果列中不包含任何无效值,我们就可以保存表定义,而不会出现任何错误或警告。

将列类型设置为 ENUM 的优点之一是 Navicat 将提供一个下拉菜单来选择值:

adding_a_new_row_to_the_film_table (48K)

结语

在今天的博客中,我们使用 Navicat Premium 17 的类型工具创建了一个枚举类型,并更新了一个现有表以使用我们的自定义类型来约束列值。第四部分将继续介绍范围类型。

Navicat 文章
频道条目
分享
文章归档