0


PostgreSQL数据类型大总结,一家老小都在这里

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程,B站及腾讯课堂讲师,直播量破10W
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

前言

本文对PostgreSQL数据类型做了很全面的总结,希望对大家有所帮助

⛳️ 1.数值类型

下表列出了 PostgreSQL 支持的数值类型

在这里插入图片描述

postgres=# create table jem (id serial ,name varchar(20));
postgres=# insert into jem(name) values(‘IT邦德’);

在这里插入图片描述

⛳️ 2.货币类型

money 类型存储带有固定小数精度的货币金额。
numeric、int 和 bigint 类型的值可以转换为 money,
不建议使用浮点数来处理处理货币类型,因为存在舍入错误的可能性。
名字 存储容量 描述 范围
money 8 字节 货币金额 -92233720368547758.08 到 +92233720368547758.07

⛳️ 3.字符类型

PostgreSQL 所支持的字符类型:
序号 名字 & 描述
1 varchar(n)变长,有长度限制
2 character(n), char(n)定长,不足补空白
3 text变长,无长度限制

⛳️ 4.日期/时间类型

下表列出了 PostgreSQL 支持的日期和时间类型
在这里插入图片描述

⛳️ 5.布尔类型

PostgreSQL 支持标准的 boolean 数据类型。
boolean 有"true"(真)或"false"(假)两个状态,
第三种"unknown"(未知)状态,用 NULL 表示。

在这里插入图片描述

⛳️ 6.枚举类型

枚举类型是一个包含静态和值的有序集合的数据类型。
PostgtesSQL中的枚举类型类似于 C 语言中的 enum 类型。
与其他类型不同的是枚举类型需要使用 CREATE TYPE 命令创建

postgres=# CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
创建一周中的几天,如下所示:
postgres=# CREATE TYPE 
week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
就像其他类型一样,一旦创建,枚举类型可以用于表和函数定义。
postgres=# CREATE TABLE person (
name text,
current_mood mood
);
postgres=# INSERT INTO person VALUES ('Moe', 'happy');
postgres=# SELECT * FROM person WHERE current_mood = 'happy';

在这里插入图片描述

⛳️ 7.枚举类型

几何数据类型表示二维的平面物体。
下表列出了 PostgreSQL 支持的几何类型。
最基本的类型:点。它是其它类型的基础。

在这里插入图片描述

⛳️ 8. 网络地址类型

PostgreSQL 提供用于存储 IPv4 、IPv6 、MAC 地址的数据类型。
用这些数据类型存储网络地址比用纯文本类型好,
因为这些类型提供输入错误检查和特殊的操作和功能

在这里插入图片描述

⛳️ 9.位串类型

位串就是一串 1 和 0 的字符串。它们可以用于存储和直观化位掩码。
我们有两种 SQL 位类型:bit(n) 和bit varying(n), 这里的n是一个正整数。
bit 类型的数据必须准确匹配长度 n, 试图存储短些或者长一些的数据都是错误的。
bit varying 类型数据是最长 n 的变长类型;更长的串会被拒绝。 写一个没有长度的bit 等效于 bit(1),
没有长度的bit varying 意思是没有长度限制。

⛳️10.文本搜索类型

全文检索即通过自然语言文档的集合来找到那些匹配一个查询的检索。
PostgreSQL 提供了两种数据类型用于支持全文检索:

在这里插入图片描述

⛳️11.UUID 类型

uuid 数据类型用来存储 RFC 4122,ISO/IEF 9834-8:2005 以及相关标准定义的通用唯一标识符(UUID)。 (一些系统认为这个数据类型为全球唯一标识符,或GUID。)
这个标识符是一个由算法产生的 128 位标识符,
使它不可能在已知使用相同算法的模块中和其他方式产生的标识符相同。
因此,对分布式系统而言,这种标识符比序列能更好的提供唯一性保证,
因为序列只能在单一数据库中保证唯一。
UUID 被写成一个小写十六进制数字的序列,由分字符分成几组,
特别是一组8位数字+3组4位数字+一组12位数字,总共 32 个数字代表128 位,
一个这种标准的 UUID 例子如下:
a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

⛳️12.XML类型

xml 数据类型可以用于存储XML数据。 
将 XML 数据存到 text 类型中的优势在于它能够为结构良好性来检查输入值,
 并且还支持函数对其进行类型安全性检查。 
要使用这个数据类型,编译时必须使用 configure --with-libxml。
xml 可以存储由XML标准定义的格式良好的"文档",
 以及由 XML 标准中的 XMLDecl? content 定义的"内容"片段, 大致上,
 这意味着内容片段可以有多个顶级元素或字符节点。
  xmlvalue IS DOCUMENT 表达式可以用来判断一个特定的 xml 值是一个完整的文件还是内容片段。
使用函数 xmlparse: 来从字符数据产生 xml 类型的值:
XMLPARSE (DOCUMENT '<?xml version="1.0"?>
<book><title>Manual</title><chapter>...</chapter></book>')
XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>')

⛳️13.JSON 类型

json 数据类型可以用来存储 JSON(JavaScript Object Notation)数据,
这样的数据也可以存储为 text,
但是 json 数据类型更有利于检查每个存储的数值是可用的 JSON 值。
此外还有相关的函数来处理 json 数据:

在这里插入图片描述

⛳️14.数组类型

PostgreSQL 允许将字段定义成变长的多维数组。
数组类型可以是任何基本类型或用户定义类型,枚举类型或复合类型。

🐴14.1 声明数组

创建表的时候,我们可以声明数组,方式如下:

#pay_by_quarter 为一维整型数组、schedule 为二维文本类型数组。
postgres=# CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
##我们也可以使用 “ARRAY” 关键字
postgres=# CREATE TABLE sal_emp (
name text,
pay_by_quarter integer ARRAY[4],
schedule text[][]
);

🐴14.2 插入值

#插入值使用花括号 {},元素在 {} 使用逗号隔开:
postgres=# INSERT INTO sal_emp VALUES (‘Bill’,
‘{10000, 10000, 10000, 10000}’,
‘{{“meeting”, “lunch”}, {“training”, “presentation”}}’);
postgres=# INSERT INTO sal_emp
VALUES (‘Carol’,’{20000, 25000, 25000, 25000}’,
‘{{“breakfast”, “consulting”}, {“meeting”, “lunch”}}’);

在这里插入图片描述

🐴14.3 访问数组

现在我们可以在这个表上运行一些查询。
首先,我们演示如何访问数组的一个元素。 这个查询检索在第二季度薪水变化的雇员名:
postgres=# SELECT name FROM sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2];

在这里插入图片描述

🐴14.4 修改数组

##我们可以对数组的值进行修改:
postgres=# UPDATE sal_emp SET pay_by_quarter = ‘{25000,25000,27000,27000}’
WHERE name = ‘Carol’;
##或者使用 ARRAY 构造器语法
UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = ‘Carol’;

在这里插入图片描述

🐴14.5 数组中检索

##要搜索一个数组中的数值,你必须检查该数组的每一个值
SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 OR
pay_by_quarter[2] = 10000 OR
pay_by_quarter[3] = 10000 OR
pay_by_quarter[4] = 10000;
##另外,你可以用下面的语句找出数组中所有元素值都等于 10000 的行:
SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);

在这里插入图片描述

⛳️15.复合类型

复合类型表示一行或者一条记录的结构;
它实际上只是一个字段名和它们的数据类型的列表。
PostgreSQL 允许像简单数据类型那样使用复合类型。
比如,一个表的某个字段可以声明为一个复合类型。

⛳️16.范围类型

范围数据类型代表着某一元素类型在一定范围内的值。
例如,timestamp 范围可能被用于代表一间会议室被预定的时间范围。
PostgreSQL 内置的范围类型有:
int4range — integer的范围
int8range —bigint的范围
numrange —numeric的范围
tsrange —timestamp without time zone的范围
tstzrange —timestamp with time zone的范围
daterange —date的范围
此外,你可以定义你自己的范围类型:

CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
(1108, ‘[2010-01-01 14:30, 2010-01-01 15:30)’);
– 包含
SELECT int4range(10, 20) @> 3;
– 重叠
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);
– 提取上边界
SELECT upper(int8range(15, 25));
– 计算交叉
SELECT int4range(10, 20) * int4range(15, 25);
– 范围是否为空
SELECT isempty(numrange(1, 5));

⛳️17.对象标识符类型

PostgreSQL 在内部使用对象标识符(OID)作为各种系统表的主键。
同时,系统不会给用户创建的表增加一个 OID 系统字段(除非在建表时声明了WITH OIDS 或者配置参数default_with_oids设置为开启)。oid 类型代表一个对象标识符。除此以外 oid 还有几个别名:regproc, regprocedure, regoper, regoperator, regclass, regtype, regconfig, 和regdictionary。

在这里插入图片描述

⛳️18.伪类型

PostgreSQL类型系统包含一系列特殊用途的条目,
它们按照类别来说叫做伪类型。伪类型不能作为字段的数据类型,
但是它可以用于声明一个函数的参数或者结果类型。
伪类型在一个函数不只是简单地接受并返回某种SQL 数据类型的情况下很有用。
下表列出了所有的伪类型:

在这里插入图片描述
大家点赞、收藏、关注、评论啦 👇🏻👇🏻👇🏻微信公众号👇🏻👇🏻👇🏻


本文转载自: https://blog.csdn.net/weixin_41645135/article/details/123022444
版权归原作者 IT邦德 所有, 如有侵权,请联系我们删除。

“PostgreSQL数据类型大总结,一家老小都在这里”的评论:

还没有评论