【PostgreSQL】从零开始:(二十二)数据类型-枚举类型

概述

什么是枚举

枚举,又称为列举、举例或列举法,是一种通过逐一列举、点明或列举的方法来表达、阐述、说明或论述某个问题、观点或概念的过程。在数学、逻辑学和哲学中,枚举被用于证明、论证或说明某个命题、定理或理论的正确性或错误性。

在计算机科学中,枚举是一种数据类型,用于定义一组具有离散值的常量。枚举类型有有限的可能值,并且每个值都有一个相关联的名称。枚举类型可以用于简化程序中的条件判断和代码编写。

枚举也可以用于描述或分类事物、现象或概念。例如,我们可以枚举不同的动物、颜色、国家等。通过枚举,我们可以系统地列出或分类不同的元素,从而更好地理解和研究它们。

总而言之,枚举是一种通过列举、点明或分类的方法来表达、阐述或说明某个问题、观点或概念的过程。它在数学、计算机科学和其他学科中都有着重要的应用。

什么是枚举类型

枚举类型是一种在编程语言中定义的数据类型,用于定义一组具有离散值的常量。它允许我们在代码中使用特定的符号或名称来表示这些常量,而不是直接使用数字或其他表示方法。

在许多编程语言中,枚举类型是由一组预定义的常量值组成的。每个常量值都有一个相关联的名称,这些名称通常用于更好地理解和描述这些常量。通过使用枚举类型,可以使代码更易读、更易维护,并提供更好的可扩展性。

枚举(enum)类型是包含一组静态有序值的数据类型。它们等效于许多编程语言支持的类型。枚举类型的一个示例可能是星期几,或者是一段数据的一组状态值。

示例

创建和使用枚举类型

枚举类型是使用 CREATE TYPE 命令创建的,例如:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

创建后,枚举类型可以像任何其他类型一样用于表和函数定义:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TABLE person (name text,current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';name | current_mood
------+--------------Moe  | happy
(1 row)

枚举类型的排序

枚举类型中值的顺序是创建类型时列出值的顺序。枚举支持所有标准比较运算符和相关聚合函数。例如:

  • 继续在表中插入数据,并按照条件排序
INSERT INTO person VALUES ('Larry', 'sad');
INSERT INTO person VALUES ('Curly', 'ok');
SELECT * FROM person WHERE current_mood > 'sad';name  | current_mood
-------+--------------Moe   | happyCurly | ok
(2 rows)SELECT * FROM person WHERE current_mood > 'sad' ORDER BY current_mood;name  | current_mood
-------+--------------Curly | okMoe   | happy
(2 rows)SELECT name
FROM person
WHERE current_mood = (SELECT MIN(current_mood) FROM person);name
-------Larry
(1 row)

枚举类型的限制

每个枚举数据类型都是独立的,不能与其他枚举类型进行比较。请参阅此示例:

CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
CREATE TABLE holidays (num_weeks integer,happiness happiness
);
INSERT INTO holidays(num_weeks,happiness) VALUES (4, 'happy');
INSERT INTO holidays(num_weeks,happiness) VALUES (6, 'very happy');
INSERT INTO holidays(num_weeks,happiness) VALUES (8, 'ecstatic');
INSERT INTO holidays(num_weeks,happiness) VALUES (2, 'sad');
ERROR:  invalid input value for enum happiness: "sad"
SELECT person.name, holidays.num_weeks FROM person, holidaysWHERE person.current_mood = holidays.happiness;
ERROR:  operator does not exist: mood = happiness

如果确实需要执行以下类似操作,可以编写自定义运算符或向查询添加显式强制转换:

SELECT person.name, holidays.num_weeks FROM person, holidaysWHERE person.current_mood::text = holidays.happiness::text;name | num_weeks
------+-----------Moe  |         4
(1 row)

注意

枚举标签区分大小写,因此’happy’与’HAPPY’不同。标签中的空白也很重要。

尽管枚举类型主要用于静态值集,但支持向现有枚举类型添加新值,以及重命名值。不能从枚举类型中删除现有值,也不能更改此类值的排序顺序,除非删除并重新创建枚举类型。

枚举值在磁盘上占用四个字节。枚举值的文本标签的长度受编译到 PostgreSQL 中的bytes.NAMEDATALEN设置的限制;在标准版本中,这意味着最多 63 个字节。

从内部枚举值到文本标签的转换保存在系统目录pg_enum中。直接查询此目录可能很有用。

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

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

相关文章

数据仓库-数据治理小厂实践

一、简介 数据治理贯穿数仓中数据的整个生命周期,从数据的产生、加载、清洗、计算,再到数据展示、应用,每个阶段都需要对数据进行治理,像有些比较大的企业都是有自己的数据治理平台或者会开发一些便捷的平台,对于没有平…

鸿蒙-HarmonyOS之初见

鸿蒙初识,此事能成!! 自己安装工具、配置环境并运行成功,流程记录。 一、首先官网下载开发工具 官网地址:https://developer.huawei.com/consumer/cn/ 当前最新的版本3.1 ,windows和Mac,Mac又…

oppo 手机刷机流程

一、操作步骤: 一)解锁BootLoader 以下是一种常见的方法,可以尝试获取OPPO手机的Root权限(以参考信息为准,具体步骤可能因设备型号和系统版本而有所不同): 11). 解锁Bootloader:首…

【Python百宝箱】优化Python开发体验:日志记录、错误监控与高级调试

标题:“Python开发者的调试与性能优化大全” 前言 在软件开发的旅程中,调试和性能优化是每位开发者都需要掌握的关键技能。Python提供了丰富的工具和库,以应对开发中的各种挑战。本文将深入探讨logging、loguru、sentry、pdb、py-spy和debu…

js中的Array.from()和Array.of()方法的用法详情

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:JavaScript小贴士 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续…

Android 12 (InputMethodManagerService) 替换默认输入法为Pinyin输入法

1.问题场景 由于系统自带的Latin输入法不支持遥控器操作,需要替换为RK的拼音输入法。 2. 替换步骤 1)将LatinIME从mk中删除,让系统编译的时候不编译该apk --- a/Android/build/make/target/product/handheld_product.mkb/Android/build/m…

VScode安装C/C++编译器步骤

一、安装C/C插件 二、安装 MinGW-w64 工具链 使用国内源 git clone https://gitee.com/cuihongxi/ubuntu2-mac.git 下载后进入到VScode文件夹下,点击msys2-x86_64-20231026.exe进行安装 完成后,确保选中“立即运行 MSYS2”框,然后选择“完…

stable diffusion工作原理

目录 序言stable diffusion能做什么扩散模型正向扩散逆向扩散 如何训练逆向扩散 Stable Diffusion模型潜在扩散模型变分自动编码器图像分辨率图像放大为什么潜在空间可能存在?在潜在空间中的逆向扩散什么是 VAE 文件? 条件化(conditioning)文本条件化&am…

深信服技术认证“SCSA-S”划重点:命令执行漏洞

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

前端验收测试驱动开发

我们听说过很多关于测试驱动开发(TDD)的内容。那么什么是ATDD? ATDD代表验收测试驱动开发,这是一种定义验收标准并创建自动化测试来验证是否满足这些标准的软件开发方法。ATDD是一种协作方法,涉及客户、开发人员和测试…

Python算法例21 交错正负数

1. 问题描述 给出一个含有正整数和负整数的数组,将其重新排列成一个正负数交错的数组。 2. 问题示例 给出数组[-1,-2,-3,4,5,6],重新排序之后,变成[-1,5,-…

docker 部署kafka

随笔记录 目录 1. 安装zookeeper 2. 安装Kafka 2.1 拉取kafka image 2.2 查询本地docker images 2.3 查看本地 容器(docker container) 2.3.1 查看本地已启动的 docker container 2.3.2 查看所有容器的列表,包括已停止的容器。 2.4 …

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘,具有超过 100 种服务和多语言翻译的集成。 快速:网站在构建时以静态方式生成,加载时间飞快。安全:所有对后…

五分钟学完DBSCAN算法

基础概念 邻1个核心思想:基于密度,依据密度的连通性分析增长聚类 2个算法参数:邻域半径R和最少点数目minpoints 这两个算法参数实际可以刻画什么叫密集——当邻域半径R内的点的个数大于最少点数目minpoints时,就是密集。 3种点的…

SQL Error:1064,SQLState:42000

SQL Error 1064 是一个常见的 SQL 错误,通常表示 SQL 语句存在语法错误或不符合数据库的规范。SQLState 42000 是表示通用语法错误的 SQL 状态码。要解决 SQL Error 1064,需要检查的 SQL 语句,确保它们符合数据库管理系统的语法规则。 引起错…

油猴脚本教程案例【长按元素】- 哔哩哔哩一键三连

文章目录 1. 元数据2. 编写函数2.1 关键函数2.2 完整代码 3. 验证和调试3.1 效果演示 4. 可能遇到的问题和解决方法5. 结语 1. 元数据 在编写油猴脚本时,首先需要设置一些元数据,包括脚本的名称、命名空间、版本、描述等信息。以下是本脚本的元数据部分…

.NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式

之前写过使用自定义返回类的方式来统一接口数据返回格式,.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客 但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不…

7. ASP.NET Core Blazor 官网文档

官方文档地址:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/?viewaspnetcore-8.0 Blazor 是一种 .NET 前端 Web 框架,在单个编程模型中同时支持服务器端呈现和客户端交互性: 使用 C# 创建丰富的交互式 UI。共享使用 .NET 编写的…

web前端javaScript笔记——(5)原型对象和垃圾回收

原型对象 原型对象prototype 我们所创建的每一个函数,机械其都会向函数中添加一个属性prototype 这个属性对应着一个对象,这个对象就是我们所谓的原型对象 function Person(){} console.log(Person.prototype);//Object 如果函数作为普通函数调用pr…

106 uni-app 小程序之巨坑 not found path,not found methods v-for渲染出现报错

1.Component is not found in path 你是否像我一样,检查了无数遍,引入路径检查千万遍,就是没写错,小程序后台就是给你报错, 不用慌,心里默念:我不能砸电脑,我不能砸电脑&#xff0…