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

news2024/11/18 13:43:42

数组和枚举

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.coloradmin.cn/o/1492293.html

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

相关文章

CSS常用五类选择器,附面试题

学习路线 第一阶段:网页制作 HTML:常用标签,锚点,列表标签,表单标签,表格标签,标签分类,标签语义化,注释,字符实体 CSS:CSS介绍,全局…

mac报错:zsh: command not found: npm

1、问题概述? 在mac系统中使用npm命令的时候,mac os报错提示: zsh: command not found: npm 一般出现发这种情况的原因时没有安装npm,而npm这命令时集成在nodejs中的,所以安装nodejs就可以了。 2、解决办法 本质就是需要安装…

论文笔记:Code Llama: Open Foundation Models for Code

导语 Code Llama是开源模型Llama 2在代码领域的一个专有模型,作者通过在代码数据集上进行进一步训练得到了了适用于该领域的专有模型,并在测试基准中超过了同等参数规模的其他公开模型。 链接:https://arxiv.org/abs/2308.12950机构&#x…

HarmonyOS创建项目和应用—设置数据处理位置

项目和应用介绍 关于项目 项目是资源、应用的组织实体。资源包括服务器、数据库、存储,以及您的应用、终端用户的数据等。在您使用部分服务时,您是数据的控制者,数据将按照您设置的数据处理位置来存储在指定区域。 通常,您不需…

【C++】继续学习 string类 吧

开始使用 string类 吧 1 继续学习1.1 扩容机制1.2 string类对象的访问及遍历操作1.3 string类对象的修改操作1.4 其他一些成员函数 2 实践解决问题:Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见&…

计算机网络(4)----局域网与广域网

目录 1.局域网 (1)局域网拓扑结构 (2)局域网的传输介质 (3)局域网介质访问控制方法 (4)局域网的分类 (5)IEEE 802标准 (6)MAC子层与LLC子层 (7)常用的局域网技术---以太网 (8)以太网传输介质与拓扑结构的发展 (9)常用的以太网---10BASE-T以太网 (10)适配器与MAC地址…

数据库 与 数据仓库

OLTP 与 OLAP OLTP(On Line Transaction Processing,联机事务处理) 系统主要针对具体业务在数据库联机下的日常操作,适合对少数记录进行查询、修改,例如财务管理系统、ERP系统、交易管理系统等。该类系统侧重于基本的、日常的事务处理&#…

Batch Normalization和Layer Normalization和Group normalization

文章目录 前言一、Group normalization二、批量规范化(Batch Normalization)三、层规范化(Layer Normalization) 前言 批量规范化和层规范化在神经网络中的每个批次或每个层上进行规范化,而GroupNorm将特征分成多个组,并在每个组内…

【AGI】大模型 深度学习入门学习路径

【AGI】大模型 深度学习入门学习路径 1. 深度学习入门学习路径可以从以下几个方面入手:2. 深度学习中的基本概念和算法有哪些?3. Python在深度学习中的应用和库有哪些?4. PyTorch的基本计算结构和应用教程推荐?5. 如何通过实战项目加深对深度学习模型训练的理解?6. 参考资…

Linux运维:在线/离线安装Telnet客户端和Telnet服务

Linux运维:在线/离线安装Telnet客户端和Telnet服务 前言1.1 在线安装Telnet1.2 离线安装Telnet1.3 Telnet服务有关的命令 💖The Begin💖点点关注,收藏不迷路💖 前言 Telnet是一种用于远程登录到其他计算机的协议&…

springboot+jsp汽车配件管理系统idea maven 项目lw

springbootweb汽车配件销售业绩管理系统服务于汽车配件公司业务,实现了客户管理,主要负责对客户相关数据的增删改查方面、渠道管理,主要对渠道信息也就是设备的供应商渠道信息进行管理、项目管理,主要是一些项目信息的记录与整理、销售数据管…

深入探索Docker数据卷:实现容器持久化存储的完美方案(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《Docker入门到精通》 《k8s入门到实战》🏅 🔖行路有良友,便是天堂🔖 目录 四、Docker数据卷的高级管理 1、数据卷的生命周期管理 2、数据…

基于巨控GRM561/562/563Y西门子1200PLC发邮件

巨控GRM560,GRM600系列同比之前的GRM530,除短信,微信,电话语音播报增加了邮件发送功能,简单介绍一下PLC发邮件。 1在博途中建立好DB块 2.打开GRMDEV6,新建工程,做好数据采集,这里以DB4.D0&#…

【笔记】React-Native React DevTools

/** * 官网文档:https://reactnative.dev/docs/next/react-devtools */ 1、本想在Demo项目中添加依赖(npx react-devtools),但其他项目就需要再操作一次,所以全局安装就好了 yarn global add react-devtools 或 npm install -g react-devto…

linux 将 api_key设置环境变量里

vi ~/.bashrc在最后添加api_key的环境变量 export GEMINI_API_KEYAIza**********WvpX7FwbdM刷新配置 source ~/.bashrc使用python 读取环境变量 import os gemini_api_key os.getenv(GEMINI_API_KEY) print(gemini_api_key)

实战解析:打造风控特征变量平台,赋能数据驱动决策

金融业务产品授信准入、交易营销等环节存在广泛的风控诉求,随着业务种类增多,传统的专家规则、评分卡模型难以应付日趋复杂的风控场景。 在传统风控以专家规则系统为主流应用的语境下,规则模型的入参习惯被称为“变量”。基于专家规则的风险…

每日好题3.5

前缀和 这个题目巨妙,打的时候没写出来,后面补题发现太牛了 思路:当前区间左端点 L L L ,当我们向右移动一次,就相当于,原式 - f ( L ) f ( L 1 e 18 ) f(L) f(L 1e18) f(L)f(L1e18),值就…

列车调度——典型的验证栈的出栈合不合法的问题,值得一看

题目描述 有n列火车按照1,2,3...n的顺序排列,现所有的火车需要掉头,所以需要火车先驶入一个调度站,再开出来。 由于只有一根铁轨,所以要么最前面的一辆火车进去调度站,要么调度栈内最上面一辆火车开出调度栈。 现给…

go并发模式之----工作池/协程池模式

常见模式之四:工作池/协程池模式 定义 顾名思义,就是有固定数量的工人(协程),去执行批量的任务 使用场景 适用于需要限制并发执行任务数量的情况 创建一个固定大小的 goroutine 池,将任务分发给池中的 g…

如何用VisualVM工具查看堆内存文件

1.找到安装JDK的bin目录,找到 jvisualvm.exe可执行文件运行即可; 2.然后导入堆内存文件 .hprof文件,看类; 3.分析是哪些对象占了多少内存。