探索 PostgreSQL 的高级数据类型 - 第 1 部分

数组和枚举

PostgreSQL 因其可扩展性和多功能性而备受欢迎,除了传统的整数和字符串之外,它还提供了多种数据类型。其中,包括数组和枚举,其为开发者提供了高级的数据建模能力。本文中,我们将深入研究这些复杂的数据类型,并通过免费的 dvdrental sample database 来展示他们的用法和好处。

数组(Array)类型

PostgreSQL 中的数组允许在单个数据库字段中存储多个值。在处理列表或数据集至关重要的场景中,此功能非常宝贵。让我们来看一个实例。假设我们想存储电影以及出演每部电影的演员。我们可以利用数组数据类型来高效地实现这一需求。首先,以下是创建和填充新的“films_with_actors”表的语句:


CREATE TABLE films_with_actors (film_id SERIAL PRIMARY KEY,title VARCHAR(255),actors TEXT[]
);INSERT INTO films_with_actors (title, actors) VALUES
('Inception', ARRAY['Leonardo DiCaprio', 'Joseph Gordon-Levitt']),
('The Shawshank Redemption', ARRAY['Tim Robbins', 'Morgan Freeman']);

在 Navicat 中,我们可以使用表设计器来创建表:

films_with_actors_table_design (57K)

请注意,如果我们在文本类型后面添加方括号“[]”,Navicat 会将其识别为数组类型,并在保存表时在“维度”字段中添加“1”,表示它是一个一维数组。

创建了表之后,我们将能够添加数据到其中。请确保使用大括号“{}”将数组值括起来,以告诉 Navicat 每个数组中包含哪些值:

films_with_actors_table_with_data (24K)

在查询中,我们可以通过在方括号内添加所需的索引来引用特定的数组元素。因此,“actors[1]”将获取数组的第一个值:

selecting_array_values (39K)

枚举(Enum)类型

“Enumerated”的缩写,Enum 类型允许开发人员为列定义一组固定的可能值。这增强了数据库模式中的数据完整性和清晰度。让我们通过向“films_with_actors”表添加一个“rating”列来举例说明这一点。我们可以使用以下 DDL 语句为电影评级定义一个枚举类型:


CREATE TYPE rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
ALTER TABLE films_with_actors ADD COLUMN rating rating;

在 Navicat 中,我们可以在表设计器中点击列表上方的“添加字段”按钮来添加新列。在我们使用上面的 CREATE TYPE 语句创建了 rating Enum 之后,我们可以通过从类型下拉列表中选择“(Type)”项,然后从对象类型列表中选择 rating 项:

rating_column (61K)

表的 rating 列中,现在已包含一个我们已定义的枚举值的下拉列表:

rating_column_in_grid_view (32K)

总结

PostgreSQL 数组和枚举数据类型为开发人员提供了有效的工具来高效构建复杂的数据结构。通过利用这些高级功能,开发人员可以增强数据完整性,简化查询,并构建更健壮的数据库模式。在下周的博客中,我们将继续探索 PostgreSQL 的高级数据类型并研究 Range 类型。Range 类型提供了一种简洁的方式来表示单个数据库字段中的值范围,其在多个领域(从时间数据到数字间隔)都非常有用。

你是否正在为 PostgreSQL 数据库开发寻找一款易使用的图形化工具?Navicat Premium 和 Navicat for PostgreSQL 正好符合你的需求。点击 此处 下载全功能应用程序,免费试用 14 天!

PostgreSQL 相关文章

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

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

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图的使用

PostgreSQL 中的多版本并发控制

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

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

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

使用 Navicat Monitor 3.0 监控 PostgreSQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity中PICO实现 隔空取物 和 接触抓取物体

文章目录 前言一、隔空取物1、XR Grab Interactable2、调节扔出去时的相关系数3、用手柄射线指向需要抓取的物体后,按下侧边扳机键即可抓取 二、接触抓取物体1、替换手柄上抓取物体的脚本2、在手柄上添加 接触抓取物体的脚本3、在手柄上添加碰撞盒触发器4、在需要抓…

PHAMB: 病毒数据分箱

Genome binning of viral entities from bulk metagenomics data | Nature Communications 安装 ### New dependencies *Recommended* conda install -c conda-forge mamba mamba create -n phamb python3.9 conda activate phamb mamba install -c conda-forge -c biocond…

Java面试题(Guide)

Java 基础 Java 中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢? String 、 StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的? String s1 new String("abc");这段代码创建了几个字…

排序算法——快速排序详细解释

快速排序(Quicksort)是一种常用的排序算法,其基本思想是通过分治的策略将一个数组分成两个子数组,然后分别对这两个子数组进行递归排序 一、快速排序算法的大致思路如下: 1、我们在对列表进行排序的过程中&#xff0c…

IOS降级后从高版本到低版本恢复备份

IOS降级后从高版本到低版本恢复备份 此方法只适用于小版本还原,比如17.4->17.3,未验证大版本恢复可行性手机型号:iphone 13pro 系统版本:17.4 降级版本:17.3.1 步骤 通过itunes或者MacOS系统下对当前版本进行备份…

基于ThinkPHP框架的校园一卡通系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 框架技术 3 1.1.1 Bootstrap 3 1.1.2 ThinkPHP框架 3 1.2 前端技术 4 1.2.1 JavaScript 4 1.2.2 ECharts 4 1.3 B/S架构 4 1.4 数据库技术 5 1.4.1 MySQL 5 1.5 本章小结 6 2 系统分析 7 2.1 功能需求分析 7 2.2 非功能需…

202441读书笔记|《笠翁对韵》—— 金菡萏,玉芙蓉,酒晕微酡琼杏颊,香尘浅印玉莲双

202441读书笔记|《笠翁对韵》——金菡萏,玉芙蓉,酒晕微酡琼杏颊,香尘浅印玉莲双 《作家榜名著:笠翁对韵》作者李渔,霍俊明。是所有词句都有注音的一本书,轻松学不认识的字,非常朗朗上口的对偶词…

PromptBreeder---针对特定领域演化和发展提示词的方法

原文地址:promptbreeder-evolves-adapts-prompts-for-a-given-domain 论文地址:https://arxiv.org/pdf/2309.16797.pdf 2023 年 10 月 6 日 提示方法分为两大类 硬提示是由人工精心设计的文本提示,包含离散的输入令牌;其缺点…

【Linux】gcc与make、makefile

文章目录 1 gcc/g1.1 预处理1.2 编译1.3 汇编1.4 链接1.4.1 静态链接1.4.2 动态链接 2 make和makefile2.1 依赖关系2.2 依赖方法2.3 伪目标 3 总结 1 gcc/g 当我们创建一个文件,并向里面写入代码,此时,我们该如何使我们的代码能够运行起来呢&…

html--心花怒放

代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Canvas 绘制一个❤</title><link rel"shortcut icon" href"../../assets/images/icon/favicon.ico" type"ima…

c++ primer中文版第五版作业第十五章

仓库地址 文章目录 15.115.215.315.415.515.615.715.815.915.1015.1115.1215.1315.1415.1515.1615.1715.1815.1915.2015.2115.2215.2315.2415.2515.2615.2615.2815.2915.3015.3115.3215.3315.3415.3515.3615.3715.3815.3915.4015.4115.42 15.1 基类希望其派生类进行覆盖的函数&…

C#实现快速排序算法

C#实现快速排序算法 以下是C#中的快速排序算法实现示例&#xff1a; using System;class QuickSort {// 快速排序入口函数public static void Sort(int[] array){QuickSortRecursive(array, 0, array.Length - 1);}// 递归函数实现快速排序private static void QuickSortRecu…

springboot配置Redis缓存多节点

随着微服务架构的广泛应用&#xff0c;分布式缓存系统在提升系统性能、降低数据库压力方面起着关键作用。Redis作为高性能的内存键值对数据库&#xff0c;凭借其丰富的数据结构和高速读写能力&#xff0c;在众多缓存解决方案中脱颖而出。在Spring Boot框架中&#xff0c;我们可…

Python 潮流周刊第 41 期(摘要),赠书5本

本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景&#xff1a;帮助所有读者精进 Python 技术&#xff0c;并增长职业和副业的收入。 周刊全文&#xff1a;h…

测试开发面试题|面试真题

📋 个人简介 作者简介:大家好,我是凝小飞,软件测试领域作者支持我:点赞👍+收藏⭐️+留言📝测试开发的面试题,一般会考一些基础的算法编程题,难度不是特别高,除非是大厂的那种卷,如下是我作为面试官整理的一些参考测试题,供参考 算法排序类 Python: 一、list…

ubuntu自带屏幕截图功能

目录 简介开始截屏步骤1.打开截屏软件2.选择区域3.截图 快捷键 录屏方法11.开始录屏2.停止录屏 方法2 补充说明 简介 试了好多开源跨平台截图软件&#xff0c;但是在ubuntu上都或多或少存在问题。ubuntu有自带的截图软件。打算把ubuntu自带的截图软件用起来。 顺便说一下我使…

B端系统升级,登录页必在升级之列,不容置疑。

进行B端界面升级时&#xff0c;首先升级登录页有以下几个原因&#xff1a; 用户体验&#xff1a;登录页是用户进入系统的第一个页面&#xff0c;用户首先接触到的界面。通过升级登录页&#xff0c;可以提升用户的第一印象&#xff0c;增强用户对系统的信任感和好感度&#xff…

Android Studio编译及调试知识

文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息&#xff0c;类似这种工具的使用Android apk 从你的代码到APK打包的过程&#xff0c;APK安装到你的Android手机上的过程&#xff0c;最后安装好的形态&#xff0c;以…

简单形状点云轮廓点排序(旋转角)

1、背景介绍 很多边缘提取算法提取的边缘点为无序点云&#xff0c;如下图所示&#xff0c;无序点云不利于后续各种应用&#xff0c;比如根据边缘计算点云面积、点云轮廓线规则化等。若对点云进行排序&#xff0c;则可以进行上述引用。但实际上&#xff0c;点云形状错综复杂&…

Dubbo 和 Zookeeper 的关系

Dubbo 和 Zookeeper 的关系 Zookeeper的作用 zookeeper用来注册服务和进行负载均衡&#xff0c;哪一个服务由哪一个机器来提供必需让调用者知道&#xff0c;简 单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方 业务代码中实现&#…