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

embedded/2025/2/8 10:05:51/

复合类型

欢迎来到,使用 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_yearFROMfilmWHEREfilm_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.ppmy.cn/embedded/160513.html

相关文章

docker直接运行arm下的docker

运行环境是树莓派A 处理器是 arm32v6 安装了docker,运行lamp 编译安装php的时候发现要按天来算,于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…

Linux中DataX使用第三期

简介 紧接着上期关于DataX源码的初步了解,本期来自己定义一个简单的数据读取和数据写入插件。目的为了方便了解DataX工作的流程。 环境 Windows10 (linux中命令相似,为了方面调试就用windows的)JDK(1.8以上,推荐1.8)Python(2或3都可以)Apach…

UnityShader学习笔记——基础纹理

——内容源自唐老狮的shader课程 目录 1.概述 2.纹理颜色采样 3.纹理结合光照 4.凹凸纹理 4.1.概念 4.2.高度纹理贴图 4.3.法线纹理贴图(一般用这个) 4.3.1.概述 4.3.2.读取分量的规则 4.3.3.法线纹理贴图的两种存储方式 1.基于模型空间的法线纹理 2.基于切线空间的法…

feign Api接口中注解问题:not annotated with HTTP method type (ex. GET, POST)

Bug Description 在调用Feign api时,出现如下异常: java.lang.IllegalStateException: Method PayFeignSentinelApi#getPayByOrderNo(String) not annotated with HTTPReproduciton Steps 1.启动nacos-pay-provider服务,并启动nacos-pay-c…

带罚函数的Bspline拟合

1、内容简介 略 matlab simulink 115-带罚函数的Bspline拟合可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略Flexible Smoothing with B-splines and Penaltie.pdf

团餐订餐系统源码企业订餐小程序写字楼办公区团餐软件开发

市场前景 近年来,随着社会经济的发展和人们生活节奏的加快,团餐市场规模持续扩大,现已稳稳占据了整个餐饮市场三分之一左右的份额,成为了推动餐饮行业发展的重要力量。截至2023年,中国团餐行业市场规模达22350亿元&am…

【Prometheus】如何通过prometheus监控Tomcat运行状态

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

DeepSeek 的含金量还在上升

大家好啊,我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评,除此之外,也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章,探讨 DeepSeek 在使用 GPU 进行模型训练…