PostgreSQL 数据类型
文章目录
- PostgreSQL数据类型说明
- PostgreSQL数据类型使用
- 单引号和双引号
- 数据类型转换
- 布尔类型
- 数值类型
- 整型
- 浮点型
- 序列
- 数值的常见操作
- 字符串类型
- 日期类型
- 枚举类型
- IP类型
- JSON&JSONB类型
- 复合类型
- 数组类型
PostgreSQL数据类型说明
PGSQL支持的类型特别丰富,大多数的类型和MySQL都有对应的关系
名称 | 说明 | 对比MySQL |
---|---|---|
布尔类型 | boolean,标准的布尔类型,只能存储true,false | MySQL中虽然没有对应的boolean,但是有替换的类型,数值的tinyint类型,和PGSQL的boolean都是占1个字节。 |
整型 | smallint(2字节),integer(4字节),bigint(8字节) | 跟MySQL没啥区别。 |
浮点型 | decimal,numeric(和decimal一样一样的,精准浮点型),real(float),double precision(double),money(货币类型) | 和MySQL基本也没区别,MySQL支持float,double,decimal。MySQL没有这个货币类型。 |
字符串类型 | varchar(n)(character varying),char(n)(character),text | 这里和MySQL基本没区别。 PGSQL存储的varchar类型,可以存储一个G。MySQL好像存储64kb。 |
日期类型 | date(年月日),time(时分秒),timestamp(年月日时分秒)(time和timestamp可以设置时区) | 没啥说的,和MySQL基本没区别。 MySQL有个datetime。 |
二进制类型 | bytea-存储二进制类型 | MySQL也支持,MySQL中是blob |
位图类型 | bit(n)(定长位图),bit varying(n)(可变长度位图) | 就是存储0,1。MySQL也有,只是这个类型用的不多。 |
枚举类型 | enum,跟Java的enum一样 | MySQL也支持。 |
几何类型 | 点,直线,线段,圆………… | MySQL没有,但是一般开发也用不到 |
数组类型 | 在类型后,追加[],代表存储数组 | MySQL没有~~~ |
JSON类型 | json(存储JSON数据的文本),jsonb(存储JSON二进制) | 可以存储JSON,MySQL8.x也支持 |
ip类型 | cidr(存储ip地址) | MySQL也不支持~ |
更多数据类型见官网
PostgreSQL数据类型使用
单引号和双引号
在PGSQL中,写SQL语句时,单引号用来标识实际的值。双引号用来标识一个关键字,比如表名,字段名。
-- 单引号写具体的值,双引号类似MySQL的``标记,用来填充关键字
-- 下面的葡萄牙会报错,因为葡萄牙不是关键字
select 1.414,'卡塔尔',"葡萄牙";
数据类型转换
第一种方式:只需要在值的前面,添加上具体的数据类型即可
-- 将字符串转成位图类型
select bit '010101010101001';
第二种方式:也可以在具体值的后面,添加上 ::类型 ,来指定
-- 数据类型
select '2011-11-11'::date;
select '101010101001'::bit(20);
select '13'::int;
第三种方式:使用CAST函数
-- 类型转换的完整写法
select CAST(varchar '100' as int);
布尔类型
布尔类型可以存储三个值,true,false,null。
布尔类型的约束没有那么强,true,false大小写随意,他会给你转,同时yes,no这种他也认识,但是需要转换
select true,false,'yes'::boolean,boolean 'no',True,FaLse,NULL::boolean;
boolean类型在做and和or的逻辑操作时的结果
字段A | 字段B | A and B | A or B |
---|---|---|---|
true | true | true | true |
true | false | false | true |
true | NULL | NULL | true |
false | false | false | false |
false | NULL | false | NULL |
NULL | NULL | NULL | NULL |
数值类型
整型
整型比较简单,主要就是三个:
- smallint、int2:2字节
- integer、int、int4:4字节
- bigint、int8:8字节
一般就用integer,如果要存主键,比如雪花算法,那就bigint。如果要节约空间,根据情况可选smallint。
浮点型
浮点类型就关注2个
- decimal(n,m):本质就是numeric,PGSQL会帮你转换
- numeric(n,m):PGSQL本质的浮点类型
针对浮点类型的数据,就使用 numeric
序列
MySQL中的主键自增,是基于auto_increment去实现。MySQL里没有序列的对象。PGSQL和Oracle十分相似,支持序列:sequence。序列的正常构建方式:
create sequence erdan.table_id_seq;
-- 查询下一个值
select nextval('erdan.table_id_seq');
-- 查询当前值
select currval('erdan.table_id_seq');
序列大多数的应用,是用作表的主键自增效果。
-- 表自增
create table erdan.xxx(id int8 default nextval('erdan.table_id_seq'),name varchar(16)
);
insert into erdan.xxx (name) values ('xxx');
select * from erdan.xxx;
PGSQL提供了序列的数据类型,可以在声明表结构时,直接指定序列的类型即可。
- smallserial
- serial
- bigserial
-- 表自增(爽)
create table erdan.yyy(id bigserial, name varchar(16)
);
insert into erdan.yyy (name) values ('yyy');
在drop表之后,序列不会被删除,但是序列会变为不可用的状态。因为序列在使用serial去构建时,会绑定到指定表的指定列上。如果是单独构建序列,再构建表,使用传统方式实现,序列和表就是相对独立的。
数值的常见操作
针对数值下面实现加减乘除取余这5个操作
操作符 | 描述 | 示例 | 结果 |
---|---|---|---|
^ | 幂 | 2 ^ 3 | 8 |
|/ | 平方根 | |/ 36 | 6 |
@ | 绝对值 | @ -5 | 5 |
& | 与 | 31 & 16 | 16 |
| | 或 | 31|32 | 63 |
<< | 左移 | 1<<1 | 2 |
>> | 右移 | 16>>1 | 8 |
数值操作也提供了一些函数,比如pi(),round(数值,位数),floor(),ceil()
字符串类型
字符串类型用的是最多的一种,在PGSQL里,主要支持三种:
- character(就是MySQL的char类型),定长字符串。(最大可以存储1G)
- character varying(varchar),可变长度的字符串。(最大可以存储1G)
- text(跟MySQL异常)长度特别长的字符串。
操作可以查看官方说明
日期类型
在PGSQL中,核心的时间类就三个。
- timestamp(时间戳,覆盖 年月日时分秒)
- date(年月日)
- time(时分秒)
在PGSQL中,声明时间只需要使用字符串正常的编写 yyyy-MM-dd HH:mm:ss
使用数据转换方式就可以转换为时间类型。
当前系统时间 :
- 可以使用now作为当前系统时间(没有时区的概念)
select timestamp 'now';-- 直接查询now,没有时区的概念select time with time zone 'now' at time zone '08:00:00'
- 也可以使用current_timestamp的方式获取(推荐,默认东八区)
日期类型的运算:
- 正常对date类型做+,-操作,默认单位就是天~
- date + time = timestamp~~~
select date '2011-11-11' + time '12:12:12' ;
- 可以针对timestamp使用interval的方式进行 +,-操作,在查询以时间范围为条件的内容时,可以使用
select timestamp '2011-11-11 12:12:12' + interval '1day' + interval '1minute' + interval '1month';
枚举类型
枚举类型MySQL也支持,只是没怎么用,PGSQL同样支持这种数据类型。声明枚举类型作为表中的字段类型,这样可以无形的给表字段追加规范。
-- 声明一个星期的枚举,值自然只有周一~周日。
create type week as enum ('Mon','Tues','Sun');
-- 声明一张表,表中的某个字段的类型是上面声明的枚举。
drop table test;
create table test(id bigserial ,weekday week
);
insert into test (weekday) values ('Mon');
insert into test (weekday) values ('Fri');
IP类型
PGSQL支持IP类型的存储,支持IPv4,IPv6这种,甚至Mac那种诡异类型也支持。这种IP类型,可以在存储IP时,帮助做校验,其次也可以针对IP做范围查找。IP校验的效果如下:
IP也支持范围查找:
JSON&JSONB类型
JSON在MySQL8.x中也做了支持,但是MySQL支持的不好,因为JSON类型做查询时,基本无法给JSON字段做索引。PGSQL支持JSON类型以及JSONB类型,两者使用基本没区别。
JSON和JSONB的区别:
- JSON类型无法构建索引,JSONB类型可以创建索引。
- JSON类型的数据中多余的空格会被存储下来。JSONB会自动取消多余的空格。
- JSON类型甚至可以存储重复的key,以最后一个为准。JSONB不会保留多余的重复key(保留最后一个)。
- JSON会保留存储时key的顺序,JSONB不会保留原有顺序。
JSON中key对应的value的数据类型
JSON | PGSQL |
---|---|
String | text |
number | numeric |
boolean | boolean |
null | (none) |
[{"name": "张三"},{"name": {"info": "xxx"}}]
操作JSON:
- 上述的四种JSON存储的类型:
select '9'::JSON,'null'::JSON,'"erdan"'::JSON,'true'::json;select '9'::JSONB,'null'::JSONB,'"erdan"'::JSONB,'true'::JSONB;
- JSON数组
select '[9,true,null,"我是字符串"]'::JSON;
- JSON对象
select '{"name": "张三","age": 23,"birthday": "2011-11-11","gender": null}'::json;select '{"name": "张三","age": 23,"birthday": "2011-11-11","gender": null}'::jsonb;
- 构建表存储JSON
create table test(id bigserial,info json,infob jsonb);insert intotest(info,infob) values ('{"name": "张三" ,"age": 23,"birthday": "2011-11-11","gender": null}','{"name": "张三" ,"age": 23,"birthday": "2011-11-11","gender": null}')select * from test;
- 构建索引的效果
create index json_index on test(info);create index jsonb_index on test(infob);
JSON还支持很多函数,可以直接查看官方
复合类型
复合类型就好像Java中的一个对象,Java中有一个User,User和表做了一个映射,User中有个人信息对象。可以基于符合类型对映射上个人信息。
public class User{private Integer id;private Info info;
}class Info{private String name;private Integer age;
}
按照上面的情况,将Info构建成一个复合类型
-- 构建复合类型,映射上Info
create type info_type as (name varchar(32),age int);
-- 构建表,映射User
create table tb_user(id serial,info info_type
);
-- 添加数据
insert into tb_user (info) values (('张三',23));
insert into tb_user (info) values (('露丝',233));
insert into tb_user (info) values (('jack',33));
insert into tb_user (info) values (('李四',24));
select * from tb_user;
数组类型
PGSQL中,指定数组的方式就是[],可以指定一维数组,也支持二维甚至更多维数组。构建数组的方式:
drop table test;
create table test(id serial,col1 int[],col2 int[2],col3 int[][]
);
-- 构建表指定数组长度后,并不是说数组内容只有2的长度,可以插入更多数据
-- 甚至在你插入数据,如果将二维数组结构的数组扔到一维数组上,也可以存储。
-- 数组编写方式
select '{{how,are},{are,you}}'::varchar[];
select array[[1,2],[3,4]];
insert into test (col1,col2,col3) values ('{1,2,3}','{4,5,6}','{7,8,9}');
insert into test (col1,col2,col3) values ('{1,2,3}','{4,5,6}',array[[1,2],[3,4]]);
insert into test (col1,col2,col3) values ('{1,2,3}','{4,5,6}','{{1,2},{3,4}}');
select * from test;
如果现在要存储字符串数组,如果存储的数组中有双引号怎么办,有大括号怎么办。
-- 如果存储的数组中的值,有单引号怎么办?
-- 使用两个单引号,作为一个单引号使用
select '{''how''}'::varchar[];
-- 如果存储的数组中的值,有逗号怎么办?(PGSQL中的数组索引从1开始算,写0也是从1开始算。)
-- 用双引号将数组的数据包起来~
select ('{"how,are"}'::varchar[])[2];
-- 如果存储的数组中的值,有双引号怎么办?
-- 如果要添加双引号,记得转义。
select ('{"\"how\",are"}'::varchar[])[1];
数组的比较方式
-- 包含
select array[1,2] @> array[1];
-- 被包含
select array[1,2] <@ array[1,2,4];
-- 是否有相同元素
select array[2,4,4,45,1] && array[1];
相关文章:
PostgreSQL 数据类型
文章目录 PostgreSQL数据类型说明PostgreSQL数据类型使用单引号和双引号数据类型转换布尔类型数值类型整型浮点型序列数值的常见操作 字符串类型日期类型枚举类型IP类型JSON&JSONB类型复合类型数组类型 PostgreSQL数据类型说明 PGSQL支持的类型特别丰富,大多数…...
智慧港口4G+UWB+GPS/北斗RTK人员定位系统解决方案
港口人员定位系统能够帮助企业实现对港口作业人员的全面监控和管理,不仅可以保障人员的人身安全,还可以提高人员的作业效率,为港口的可持续发展提供有力保障。接下来为大家分享智慧港口人员定位系统解决方案。 方案背景 1、港口作业人员多&a…...
实时时钟和日历电路芯片MS85163/MS85163M
MS85163/MS85163M 是一款 CMOS 实时时钟 (RTC) 和 日历电路,针对低功耗进行了优化,内置了可编程的时钟输出、中断输出和低电压检测器。所有寄存器地址和数据都通过两线双向I 2 C 总线进行串行传输,最大总线传输速度为 400kbit/s 。采用SOP8…...
【Java从入门到精通】这也许就是Java火热的原因吧!
前言:Java是一种高级的、面向对象的、可跨平台的程序设计语言。Java根据技术类别可划分为以下几类:JavaSE(Standard Edition,标准版):支持面向桌面、嵌入式和移动设备的应用程序开发;JavaEE&…...
zTasker—简洁易用强大的定时热键一体自动化工具,效率倍增器
软件名称 zTasker 应用平台 PC Windows7及以上 一句简介 市面上定时类软件很多,但无一例外功能都很单一,要完成不同的任务,需要不同的软件 市面上的热键软件,要么功能少,要么像是AutoHotKey这样对于一般用户太专业…...
惊艳时装界!AIGC风暴来袭,从设计到生产的全新体验
时尚是一个不断演进的领域,充满创新和独创性,但现在,创新迈入了一个崭新的境界——人工智能生成内容(AIGC)。这个革命性的技术,改变了时装设计的游戏规则。在过去的几年里,人工智能已经深刻地改…...
element -ui table表格内容无限滚动 使用插件vue-seamless-scroll
使用插件 一、安装组件依赖 npm install vue-seamless-scroll 二、引入组件 import vueSeamlessScroll from "vue-seamless-scroll"; components: { vueSeamlessScroll }, <div class"table-list "><vue-seamless-scroll :class-option"…...
如何在windows环境下编译T
一, 安装MYSYS2 1. 去https://www.msys2.org下载 msys2-x86_64-xxxxx.exe; 2. 按照msys2.org主页提示的步骤安装; 3.安装完默认起来的是 UCRT的, 可以根据环境的需要选择, 我选择的 MSYS2 MINGW64 4. 搭建编译环境, 安装对应的软…...
USB接口针式打印机
1 针式打印机原理 - 针式打印机16针是纵向排列,每次打印垂直的16bit,然后右移一bit,继续下列打印;字节的MSB表示最上面的点,字节LSB表示最下面的点 - 由于汉字字模的点阵是横向排列的,而提供给打印头的信息…...
外贸建站教程步骤有哪些?独立站怎么搭建?
推荐的外贸建站教程?制作国际贸易网站的流程? 对于那些希望将产品或服务推向全球市场的企业来说,建立一个专业、具有吸引力的网站是至关重要的。下面115SHOP将介绍外贸建站教程的关键步骤,帮助您更好地了解如何在国际市场上建立您…...
useGetState自定义hooks解决useState 异步回调获取不到最新值
setState 的两种传参方式 1、直接传入新值 setState(options); const [state, setState] useState(0); setState(state 1); 2、传入回调函数 setState(callBack); const [state, setState] useState(0); setState((prevState) > prevState 1); // prevState 是改变之…...
input子系统框架、外设驱动开发
一、input子系统基本框架 Linux内核为了两个目的: 简化纯输入类外设(如:键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等)的驱动开发统一输入类外设产生的数据格式(struct input_event),更加方…...
Google Chrome 浏览器以全屏模式打开
目录 前言以全屏模式打开禁止弹出无法更新的提示窗禁止翻译网页Chrome设置禁止翻译网页可能1可能2可能3 网页添加指令禁止Chrome翻译网页 禁用脚本气泡浏览器解决办法html解决办法方法1:鼠标滑过超链接时,使状态栏不出现超链接方法2:方法3&am…...
安装torch113、cuda116并运行demo【Transformer】
文章目录 01. 导读02. 显卡驱动版本03. 创建环境、下载安装必要包04. 运行参考代码: 01. 导读 安装torch113、cuda116并运行demo【Transformer】 02. 显卡驱动版本 C:\Users\Administrator>nvidia-smi -l 10 Wed Sep 13 23:35:08 2023 ----------------------…...
基于scRNA-seq的GRN分析三阴性乳腺癌的肿瘤异质性
三阴性乳腺癌即TNBC是一种肿瘤异质性高的乳腺癌亚型。最近的研究表明,TNBC患者可能包含具有不同分子亚型的细胞。此外,基于scRNA-seq数据构建的GRN已经证明了对关键调控因子研究的重要性。作者使用scRNA-seq对TNBC患者的GRN进行了全面分析。从scRNA-seq数…...
Python:二进制文件实现等间隔取相同数据量并合并
举例:每3byte为一页,每3页为一wl。将所有wl的第一页/第二页/第三页分别合并为一个文件。 data b\x01\x02\x03\x04\x05\x06\x07\x08\x09\x01\x02\x03\x04\x05\x06\x07\x08\x09\x01\x02\x03\x04\x05\x06\x07\x08\x09\x01\x02\x03\x04\x05\x06\x07\x08\x0…...
python使用openvc库进行图像数据增强
以下是使用Python和OpenCV库实现图像数据增强的简单示例代码,其中包括常用的数据增强操作: import cv2 import numpy as np import os# 水平翻转 def horizontal_flip(image):return cv2.flip(image, 1)# 垂直翻转 def vertical_flip(image):return cv2…...
如何利用Api接口获取手机当前的网络位置信息
在移动互联网时代,手机定位已经成为了一个日常化的需求,无论是导航、社交还是打车等服务都需要获取手机的位置信息。而获取手机位置信息最基础的一步就是获取手机当前的网络位置信息,本文将介绍如何利用API接口获取手机当前的网络位置信息。 …...
vue-elementPlus自动按需导入和主题定制
elementPlus自动按需导入 装包 -> 配置 1. 装包(主包和两个插件包) $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置,配置完重启(n…...
idea中dataBase模板生成
controller.java.vm ##定义初始变量 #set($tableName $tool.append($tableInfo.name, "Controller")) ##设置回调 $!callback.setFileName($tool.append($tableName, ".java")) $!callback.setSavePath($tool.append($tableInfo.savePath, "/contro…...
pc端测试手机浏览器运行情况,主要是测试硬件功能
测试h5震动摇晃等功能时不方便测试,需要连电脑显示调试数据 方法: 1.需要手机下载谷歌浏览器,pc端用edge或这谷歌浏览器 2.手机打开USB调试,打开要测试的网页 3.pc端地址栏输入edge://inspect/#devices(这里用的edge浏…...
软件概要设计-架构真题(二十五)
软件概要设计包括软件设计的结构、确定系统功能模块及其相互关系,主要采用()描述程序的结构。(2018年) 程序流程图、PAD图和伪代码模块结构图、数据流图和盒图模块结构图、层次图和HIPO图程序流程图、数据流图和层次图…...
CSDN发文表情包整理
文章目录 简介部分Emoji表情符号简表人物自然物品地点符号 各种Emoji表情链接 简介 CSDN支持Markdown语法及Emoji表情,使用各种Emoji表情可以使得自己的博文更加生动多彩。一般有两种在支持Markdown的语法环境中添加Emoji表情:1.直接将表情包复制到文档…...
springBoot对接Apache POI 实现excel下载和上传
搭建springboot项目 此处可以参考 搭建最简单的SpringBoot项目_Steven-Russell的博客-CSDN博客 配置Apache POI 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version> </…...
定积分的计算:牛顿-莱布尼茨公式
目录 牛顿-莱布尼茨公式 用C语言代码实现 利用换元积分法和分部积分法 利用奇偶性和周期性求积分 利用已有公式求积分 牛顿-莱布尼茨公式 牛顿-莱布尼茨公式(Newton-Leibniz formula)是微积分学中的基本定理之一,它反映了定积分与被积函…...
shell脚本之case 的用法
shell脚本之case case是Shell脚本中的一种控制流语句,它允许根据变量的值选择不同的执行路径。case语句的语法如下: case word in pattern [| pattern]...) command-list ;; pattern [| pattern]...) command-list ;; ... *) command-list ;; esa…...
第3章 helloworld 驱动实验(iTOP-RK3568开发板驱动开发指南 )
在学习C语言或者其他语言的时候,我们通常是打印一句“helloworld”来开启编程世界的大门。学习驱动程序编程亦可以如此,使用helloworld作为我们的第一个驱动程序。 接下来开始编写第一个驱动程序—helloworld。 3.1 驱动编写 本小节来编写一个最简单的…...
基于PyTorch使用LSTM实现新闻文本分类任务
本文参考 PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm1001.2014.3001.5501 文章目录 本文参考任务介绍做数据的导入 环境介绍导入必要的包介绍torchnet和keras做数据的导入给必要的参数命名加载文本数据数据前处理模型训…...
Flutter插件的制作和发布
Flutter制作插件有两种方式(以下以android和ios为例): 目录 1.直接在主工程下的android和ios项目内写插件代码:2.创建独立Flutter Plugin项目,制作各端插件后,再引入项目:1. 创建Flutter Plugin…...
【JAVA】异常
作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和…...
查找网站备案信息/站外推广免费网站
MySQL数学函数简明总结1. ABS(x): 返回x的绝对值mysql> select ABS(1), ABS(-1), ABS(0);-------------------------| ABS(1) | ABS(-1) | ABS(0) |-------------------------| 1 | 1 | 0 |-------------------------2. PI(): 返回圆周率mysql> select P…...
保定seo博客/seo的优化方向
在一对多方案中,我们用逗号拼接进行存储,避免存储多条,或者分表,那么此时出现了存储上如果需要修改的话 就带来了难度,比如规则记录表如下 如果2号规则被删除,那么这张表的所有有2的记录也要被清除掉&#…...
做电子商务的网站/windows优化大师是什么软件
css中的复合选择器分类: 《1》交集选择器 div.special{......} div#special{........} 以上为交集选择器,当我们定义css样式时,这种选择器只有全部满足的时候才可以同时使用这里的属性 《2》并集选择器 div,h1.first,p.sp…...
贵州建设考试网站/网络推广的优势
1.场景和需求: 有一个接口,里面做了获取数据和更新的操作,非常耗时,一条数据需要花费1秒钟 检查updateJiakeGejieData这个接口,里面有一段for循环操作,需要一条一条读取数据并更新 再检查getAccountInfo这…...
高端网站设计高端网站制作/seo是免费的吗
导读:报告立足于本季度,从历史、当前以及未来视角对公司信用违约风险的时间维度进行了全面评估,从A股市场、行业、地区、规模、所有制、上市板块等视角对公司信用违约风险的结构特征进行了剖析。此外,本报告附录中详细汇报了算法、…...
做的网站打印全乱掉了/湖南网站建设加盟代理
回顾一下自己这段时间的经历,去年十二月份的时候,公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。后续的面试过程我做了一些准备,基本都能走到hr面,后…...