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

在 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_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.mrgr.cn/news/89867.html

相关文章:

  • 【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据
  • SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言
  • 【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案
  • C语言-预处理
  • t113 procd-init文件系统增加自己的程序文件
  • 网站服务器中的文件被自动删除的原因
  • openAI官方prompt技巧(一)
  • ubuntu 本地部署deepseek r1 蒸馏模型
  • AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息
  • .net的一些知识点6
  • C++效率掌握之STL库:string函数全解
  • 【Unity2D 2022:UI】创建滚动视图
  • DeepSeek:探索人工智能的新边界
  • 【csp/信奥赛C++语法学习如何入门?】
  • 【DeepSeek论文精读】2. DeepSeek LLM:以长期主义扩展开源语言模型
  • 循环神经网络
  • 【2】Cisco SD-WAN 组件介绍
  • docker /var/lib/docker/overlay2目录把磁盘空间占满问题
  • 排序算法--快速排序
  • Linux高并发服务器开发 第十六天(execlp/execl 进程回收/孤儿进程/僵尸进程 wait/waitpid回收 进程间的通信)
  • VIVADO生成DCP和EDF指南
  • 【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)
  • C++开发(软件开发)常见面试题
  • Mysql知识梳理(数据库的锁梳理,Mysql优化)
  • Android13-系统服务大管家-ServiceManager进程-启动篇
  • 【从零开始系列】DeepSeek-R1:(本地部署使用)思维链推理大模型,开源的神!——Windows / Linux本地环境测试 + vLLM / SGLang远程部署服务