当前位置: 首页 > article >正文

在 Navicat 17 中扩展 PostgreSQL 数据类型 | 复合类型

复合类型

欢迎来到,使用 Navicat Premium 17 在 PostgreSQL 创建自定义数据类型系列的第二部分。 在 第 1 部分 ,我们学习了如何为免费的 DVD Rental database 创建自定义域。域是一个用户定义的包含 NOT NULL 和 CHECK 等约束的数据类型。在今天的博客中,我们将创建一个复合类型,以便从用户定义的函数中返回复杂数据。

PostgreSQL 类型定义

类型是通过 CREATE TYPE 命令生成的。它创建的复合类型可在存储过程和函数中用作输入参数和返回值的数据类型。

PostgreSQL 的 CREATE TYPE 支持四种基本类型:

  • 复合类型:定义复合数据,将两种或多种数据类型结合在一起,从而创建复杂的多字段数据类型,以表示复杂的数据结构。
  • 枚举类型:定义一组固定的预定义命名值,只允许输入这些特定选项。
  • 范围类型:表示数值之间的连续间隔,可对日期或数字等连续数据范围进行复杂操作。
  • 基本类型:用户自定义类型可根据现有的基本类型(如 int、varchar 或 numeric)创建。 虽然用户定义的类型没有特定的“基本类型”,但新类型本质上是对 PostgreSQL 基本类型的扩展或约束。

在接下来的几节中,我们将通过创建一个类型并在函数中使用它来更详细地探索复合类型。

CREATE TYPE 语句

所有类型都是通过 CREATE TYPE 语句创建的。比方说,我们想用一个函数来返回关于一部电影的几个值,如电影 ID、片名和发行年份。下面是创建名为“film_summary”的类型的语句:

CREATE TYPE film_summary AS (
    film_id INT4,
    title VARCHAR(255),
    release_year CHAR(4)
);

在 Navicat 17 中创建类型

Navicat Premium 17 和 Navicat for PostgreSQL 17 都提供了一个基于图形用户界面的工具来生成类型,而无需了解所有确切的语法。你可以在主工具栏的“其他”下找到它:

type_menu_command (33K)

接下来,我们点击“对象”工具栏中“新建类型”项目旁边的箭头。这时会出现创建类型的四个不同选项。从弹出的菜单中选择“复合”项:

composite_menu_item (16K)

这将弹出一个网格,我们可以在其中输入字段的详细信息。由此可见,构成“film_summary”类型的三个字段已经存在,我们可以在表设计器中调出“film”表,并从其中复制类型和长度数据。下面是用 红色 突出显示的三个字段:

fields_in_table_designer (85K)

网格中的第一个字段已经有了一个空行,输入详细信息后,我们可以点击“添加成员”来添加新行。下面是已完成的网格:

composite_type_fields (30K)

在单击“保存”按钮之前,我们可以通过单击“SQL 预览”选项卡查看 Navicat 将生成的语句:

sql_preview_tab (22K)

请注意,由于我们尚未保存定义,所以类型名称是“无标题”。这是意料之中的。

现在我们来指定名称。单击“保存”按钮会弹出“保存为”对话框,我们可以在此为我们的类型命名为“film_summary”:

save_as_dialog (31K)

在函数中使用 film_summary 类型

现在开始使用“film_summary”作为函数返回类型。与创建类型一样,我们将使用 Navicat 的图形用户界面工具来创建。若要访问函数设计器,请单击主工具栏上的“函数”按钮,然后单击 “对象”工具栏上的“新建函数”:

function_buttons (23K)

编辑器会为我们预填充 CREATE FUNCTION 的大部分语法;我们只需提供一些细节,如函数名、输入参数、返回类型和函数体。下面是完整的 CREATE FUNCTION 语句:

CREATE FUNCTION get_film_summary (f_id INT4)
  RETURNS film_summary
AS $BODY$
  SELECT 
    film_id,
    title,
    release_year
  FROM
    film
  WHERE
    film_id = f_id;
$BODY$
  LANGUAGE SQL VOLATILE;

get_film_summary_function_definition (40K)

同时确保将语言设置为“SQL”。

点击“保存”按钮后,我们的函数就可以使用了。点击“执行”按钮是试用函数最快捷、最简单的方法。这时会弹出一个提示,要求我们为参数“f_id”提供一个值:

input_parameter_prompt (35K)

结果将显示在新的“结果”选项卡中:

function_results (28K)

结语

在今天的博客中,我们使用 Navicat Premium 17 的类型工具创建了一个复合类型,并设计了一个返回该复合类型的函数。第 3 部分将继续介绍枚举类型。

PostgreSQL 相关文章

在 Navicat 17 中扩展 PostgreSQL 数据类型 | 创建自定义域

为什么在下一个 IT 项目中选择使用 PostgreSQL

为什么说Navicat与PostgreSQL是数据库行业的中流砥柱?

探索 PostgreSQL 的高级数据类型 | 数组和枚举

探索 PostgreSQL 的高级数据类型 | DML/SQL 语句

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图的使用

PostgreSQL 中的多版本并发控制

Navicat 面向 PostgreSQL 查询超时的工具解决方案

在 Navicat Monitor 3 中查看 PostgreSQL 实例详细信息

使用 Navicat Monitor 3 跟踪 PostgreSQL 实例查询

使用 Navicat Monitor 3.0 监控 PostgreSQL


http://www.kler.cn/a/538724.html

相关文章:

  • LeetCode 102. 二叉树的层序遍历题解
  • Render上后端部署Springboot + 前端Vue 问题及解决方案汇总
  • IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决
  • 使用AI工具(Deepseek or 豆包etc)话业务流程图
  • 单例设计模式(Java)
  • Kafka 入门与实战
  • 教育机器人的智能驱动:揭秘舵机技术的无限可能
  • 使用Python和TensorFlow/Keras构建一个简单的CNN模型来识别手写数字
  • 系统URL整合系列视频五(后端技术实现)
  • Android Studio 配置 Gerrit Code Review
  • 深入Linux系列之环境变量
  • ZZNUOJ(C/C++)基础练习1081——1090(详解版)
  • k8s中pod常见状态解析
  • go结构体和json相互转换、序列化和反序列化
  • 2025年日祭
  • Linux strace命令介绍
  • 音频知识基础
  • 神经网络常见激活函数 5-PReLU函数
  • 阿里云专有云网络架构学习
  • 金三银四Java面试题及答案整理(2025年最新版,持续更新)
  • Java进阶面试八股文
  • DeepSeek使用技巧大全(含本地部署教程)
  • Vue 3 部分新特性解析
  • 【Unity】从父对象中获取子对象组件的方式
  • RNN-day1-NLP基础
  • 大模型推理——MLA实现方案