PostgreSQL 常用数据类型
创始人
2024-05-27 06:01:23
0

目录

    • 1.字符串类型:char(n),varchar(n),text
    • 2.数值类型:smallint,int,bigint,decimal,numeric,real,double precision,smallserial,serial,bigserial
    • 3.时间和日期类型:date,time,timestamp,interval
    • 4.布尔类型:boolean
    • 5.枚举类型:enum
    • 6.复合类型:composite
    • 7.数组类型:array
      • 声明数组:
      • 插入值:
      • 访问数组:
      • 修改数组
      • 数组中检索
    • 8.网络地址类型:cidr,inet,macaddr,macaddr8
    • 9.几何类型:point,line,lseg,box,path,polygon,circle
    • 10.JSON类型:json,jsonb
    • 11.其他类型

1.字符串类型:char(n),varchar(n),text

数据类型别名说明
character(n)char(n)定长字符串,不足补空格
character varying(n)varchar(n)变长字符串
text变长字符串

2.数值类型:smallint,int,bigint,decimal,numeric,real,double precision,smallserial,serial,bigserial

数据类型别名说明范围
smallintint2有符号2字节整数:-32768 到 +32767
integerintint4有符号4字节整数:-2147483648 到 +2147483647
bigintint8有符号8字节整数:-9223372036854775808 到 +9223372036854775807
decimal(p,s)可选精度的精确数字小数点前 131072 位;小数点后 16383 位
numeric(p,s)可选精度的精确数字小数点前 131072 位;小数点后 16383 位
realfloat4单精度浮点数(4字节)6 位十进制数字精度
double precisionfloat8双精度浮点数(8字节)15 位十进制数字精度
smallserialserial2自增2字节整数1 到 32767
serialserial4自增4字节整数1 到 2147483647
bigserialserial8自增8字节整数1 到 9223372036854775807

3.时间和日期类型:date,time,timestamp,interval

数据类型别名说明
date日历日期(年月日)
time(n) without time zonetime(n)时间(无时区)
time(n) with time zonetimetz时间,包括时区
timestamp(n) without time zonetimestamp(n)日期和时间(无时区)
timestamp(n) with time zonetimestamptz日期和时间,包括时区
interval fields(n)interval(n)时间跨度

4.布尔类型:boolean

数据类型别名说明
booleanbool逻辑布尔值(真/假)

5.枚举类型:enum

枚举类型 是一个包含静态和值的有序集合的数据类型。

  • PostgreSQL 中的枚举类型类似于 C 语言中的 enum类型。

  • 与其他类型不同的是,枚举类型需要使用 CREATE TYPE 命令创建的。

  • 像其他类型一样,一旦创建,枚举类型可以用于表和函数定义。

创建枚举类型:

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)

6.复合类型:composite

复合类型,也叫组合类型,将简单类型组合在一起,形成自定义类型。

  • 数据表的列可以定义为组合类型。

创建复合类型,声明类型包含的字段和字段类型:

CREATE TYPE inventory_item AS (name           text,supplier_id    integer,price          numeric
)

将表字段声明为组合类型:

CREATE TABLE on_hand (item    inventory_item,count   integer
);

插入数据:

(ROW 语句用于构建组合类型的值。)

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

查询数据:

SELECT * FROM on_hand;

查询结果:

 item          | count------------------------+-------("fuzzy dice",42,1.99) |  1000

补充:创建数据表的同时,会创建同名的 TYPE,如下所示:

-- 建表相当于同时执行了 CREATE TYPE complex AS (r double precision, i double precision);
CREATE TABLE complex (r double precision, i double precision);-- 使用复合类型 complex
CREATE TABLE my_complex (name text, value complex);-- 插入数据
INSERT INTO my_complex (name, value) VALUES ('one', ROW(1.0, 1.0));-- 查询数据
SELECT * FROM my_complex;-- 查询结果
name | value
------+-------
one  | (1,1)

查询复合类型,用()包围复合类型的列名,用.指向复合类型的 “域”:

SELECT (value).r FROM my_complext WHERE (value).i = 1;

查询结果:

r
---
1

7.数组类型:array

PostgreSQL 允许将字段定义为变长的多维数组。

数组类型可以是任何基本类型或用户定义类型,枚举类型或复合类型。

声明数组:

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

CREATE TABLE sal_emp {name            text,pay_by_quarter  integer[],schedule        text[][]
};

pay_by_quarter 为一维整型数组,schedule 为二维文本类型数组。

我们也可以使用 “ARRAY” 关键字,如下所示:

CREATE TABLE sal_emp (name            text,pay_by_quarter  integer ARRAY[4],schedule        text[][]
);

插入值:

插入值使用花括号,元素在 {} 使用逗号隔开:

INSERT INTO sal_empVALUES ('Bill','{10000, 10000, 10000, 10000}','{{"meeting", "lunch"}, {"training", "presentation"}}');

访问数组:

现在我们可以在这个表上运行一些查询。

首先,我们演示如何访问数组的一个元素。这个查询检索在第二季度薪水变化的雇员名:

SELECT name FROM sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2];

查询结果:

 name
-------Carol
(1 row)

数组的下标数字是写在方括弧内的。

修改数组

我们可以对数组的值进行修改:

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';

数组中检索

要搜索一个数组中的数值,你必须检查该数组的每一个值。

比如:

SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 ORpay_by_quarter[2] = 10000 ORpay_by_quarter[3] = 10000 ORpay_by_quarter[4] = 10000;

另外,你可以用下面的语句找出数组中所有元素值都等于 10000 的行:

SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);

或者,可以使用 generate_subscripts 函数。例如:

SELECT * FROM(SELECT pay_by_quarter,generate_subscripts(pay_by_quarter, 1) AS sFROM sal_emp) AS fooWHERE pay_by_quarter[s] = 10000;

8.网络地址类型:cidr,inet,macaddr,macaddr8

数据类型别名说明
cidrIPv4 或 IPv6 网络地址
inetIPv4 或 IPv6 主机地址
macaddrMAC(媒体访问控制)地址
macaddr8MAC(媒体访问控制)地址(EUI-64格式)

9.几何类型:point,line,lseg,box,path,polygon,circle

数据类型别名说明
point平面上的几何点
line平面上的无限线
lseg平面上的线段
box平面上的长方形盒子
path平面上的几何路径
polygon平面上的闭合几何路径
circle在平面上画圈

10.JSON类型:json,jsonb

数据类型别名说明
json文本 JSON 数据
jsonb二进制 JSON 数据,分解

11.其他类型

数据类型别名说明
bit(n)定长位串
bit varying(n)varbit(n)变长位串
bytea二进制数据(“字节数组”)
money货币金额
pg_lsnPostgreSQL日志序列号
pg_snapshot用户级事务 ID 快照
tsquery文本搜索查询
tsvector文本搜索文档
txid_snapshot用户级事务 ID 快照(已弃用;请参阅pg_snapshot)
uuid通用唯一标识符
xmlXML 数据

此外,PostgreSQL还支持自定义数据类型和扩展数据类型。自定义数据类型允许用户创建自己的数据类型,而扩展数据类型则是一种插件机制,允许第三方开发人员扩展 PostgreSQL 的数据类型。





参考地址:

1.postgresql数据类型,https://blog.csdn.net/eryou_979/article/details/118927281

2.PostgreSQL 数据类型,https://www.runoob.com/postgresql/postgresql-data-type.html

3.PostgreSQL数据类型,一篇就够了,https://zhuanlan.zhihu.com/p/105097036?utm_id=0

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...