复合类型

  • PostgreSQL中可以如C语言中的结构体一样定义一个复合类型;
  • 创建
create type person as (
name text,
age int,
sex boolean
); create table author (
id int,
person_info person,
book, text
);
  • 查询定义的复合类型和枚举类型一样

  • 输入

insert into author values (1, '("jinks", 24, true)', 'test book');

//用row表达式来构造复合类型值

insert into author values (1, row('jinks', 24, true), 'test book');

//只要表达式有超过一个字段,row关键字也可以省去

insert into author values (1, ('jinks", 24, true), 'test book');

  • 访问
select (person_info).name from author;
  • 更新
update author set person_info = row('pen' 24, true) where id = 1;
update author set person_info = ('pen' 24, true) where id = 1; //只更新一个复合字段的某个子域;注意set后不要跟圆括号; update author set person_info.name = 'jinks' where id = 1;
update author set person_info.age = (person_info).age + 1 where id = 1;
  • 使用row表达式和使用引号还有一个区别就是使用引号时,对于在字符串类型中保存反斜杆,必须加两层;

XML类型

  • 用于储存xml数据,数据库会对输入的数据进行安全性检查;
  • 使用xml类型数据时注意字符集问题;

JSON类型

  • 同上,也会自动进行安全性检查;

  • PostgreSQL9.4中又提供了JSONBl类型

    • JSON类型把输入的数据不变地保存,使用时重新解析;
    • JSONB类型在存放时就把JSON解析成二进制格式,使用时性能更高;
    • JSONB支持在其上建索引;
  • 把一个JSON字符串转换成JSONB类型时, JSON字符串内的数据类型实际上被转换成PostgreSQL中的类型,映射关系如下:

JSON PostgreSQL 注意点
string text 注意字符集的一些限制
number numeric JSON中没有PostgreSQL中的NaN和infinity值
boolean boolean JSON仅能用小写true,false|
null (none) SQL中的NULL代表不同的意思

Range类型

数组类型

  • 定义:
//在目前PostgreSQL中,定义数组长度和纬度都是没有意义的

create table arr1(id int, col1 int[], col2 text[]);

create table arr2(id int, col1 int[10], col2 text[][]);
  • 输入
insert into arr1 values (1, '{1,2,3}', '{a,b,c}');

//除了`box`类型分隔符为分号外,其他都基本使用逗号;

create table arr2 (box box[]);
insert into arr2 values('{((0,1),(2,3));((1,1),(2,2))}'); //字符串内容允许空格但不许为空
//字符串有逗号输入要用双引号
//字符串有单引号输入用两个单引号
//字符串双引号输入要加反斜杠 //多维数组输入 insert into arr3 values (array[['a','b'],['c','d']]);
insert into arr3 values ('{{a,b},{c,d}}');
  • 访问
//一维数组

select col[1] form arr where id = 1;

//PostgreSQL中数组的下标默认从1开始;也可以插入数据的时候指定

create table test(id init[]);
insert into test values('[0:2]={1,2,3}'); //使用切片
select id[0], id[1], id[2] from test;
select id[0:2] from test; //二维数组必须使用切片
//访问多维数组的一维 select id[1][1] form test;
  • 修改
//注意不能修改多维数组中某一维的值

update test set col[1][2] = 2 where id = 1;

伪类型

  • 不能作为字段的数据类型,但可以用于声明一个函数的参数或者结果类型;

UUID类型

  • 用于存储一个UUID;

pg_lsn类型

  • pg_lsn类型是PostgreSQL9.4版本之后提高的LSN的一种数据类型;LSN表示WAL日志的位置,在一些记录WAL日志信息的表系统中某些字段的类型就是pg_lsn类型;

psql-04数据类型(2)的更多相关文章

  1. C语言入门:04.数据类型、常量、变量

    一.数据 1.什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数 ...

  2. Day 04 数据类型基础

    目录 什么是数据类型 为什么对数据分类 整型和浮点型统称为数字类型 整型(int) 作用 定义 使用方法 浮点型(float) 作用 定义 使用方法 强制类型转换 什么是字符串 作用 定义 使用方法 ...

  3. 实验与作业(Python)-04 数据类型、数学函数与字符串

    截止日期 实验目标 继续熟悉for循环与turtle 数值运算符 math库常用函数 字符串转化为数值类型(int, float, complex) 字符串常用函数 实验内容 任务1.使用for代替w ...

  4. 【Spark机器学习速成宝典】基础篇04数据类型(Python版)

    目录 Vector LabeledPoint Matrix 使用C4.5算法生成决策树 使用CART算法生成决策树 预剪枝和后剪枝 应用:遇到连续与缺失值怎么办? 多变量决策树 Python代码(sk ...

  5. Android USB ADB ATUH 验证包验证流程

    #define ADB_AUTH_TOKEN 1 #define ADB_AUTH_SIGNATURE 2 #define ADB_AUTH_RSAPUBLICKEY 3   1. 连接USB,手机发 ...

  6. 2019-03-07-day006-小数据池

    01 昨日内容回顾 字典: 映射,{} 键值对的形式存储,容器型数据类型,key 唯一的,可哈希的,value任意数据类型,对象. 3.6之前无序的, 3.6之后,有序的(第一次创建字典的顺序) 特点 ...

  7. SHA1WithRSA

    SHA1WithRSA:用SHA算法进行签名,用RSA算法进行加密.   算法说明: 在对进行SHA1算法进行签名后,要求对签名后的数据进行处理,而不是直接进行RSA算法进行加密. 要求把SHA1签名 ...

  8. Python全栈开发第二期课表

     day01-python 全栈开发-基础篇                 01 开课介绍 01:55:13 ★  02 开课介绍02 01:28:31 ★  03 开课介绍03 00:22:55 ...

  9. 01 Java基础

    Java基础 01 Hello 随便新建一个文件夹,存放代码 新建一个Java文件 文件后缀名为.java Hello.java [注意点]系统可能没有显示文件后缀名,我们需要手动打开 编写代码  p ...

  10. 05 SpringMVC:02.参数绑定及自定义类型转换&&04.SpringMVC返回值类型及响应数据类型&&05.文件上传&&06.异常处理及拦截器

    springMVC共三天 第一天: 01.SpringMVC概述及入门案例 02.参数绑定及自定义类型转换 03.SpringMVC常用注解 第二天: 04.SpringMVC返回值类型及响应数据类型 ...

随机推荐

  1. Valentine's Day Round 1001.Ferries Wheel(hdu 5174)解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5174 题目意思:给出 n 个人坐的缆车值,假设有 k 个缆车,缆车值 A[i] 需要满足:A[i−1] ...

  2. 【leetcode】Compare Version Numbers(middle)

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  3. ArtDialog简单使用示例

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  4. Could not find Developer Disk Image

    测试机系统版本 iOS9.3,而Xcode7.2不支持 iOS9.3的真机测试,由于升级 Xcode 版本太慢,又急着看效果,怎么办呢?没事儿,只要找得到原因的问题就不是问题,现附上解决办法: 1)c ...

  5. No space left on device you must specify the filesystem type--Linux重启挂在失败

    在Linux中拷贝了一个文件比较大5G,直接提示:No SPace Left On Device,很明显是磁盘空间不够了,我因为是在虚拟机上面建的,直接右击虚拟机==>编辑设置 如图片1所示, ...

  6. Codeforces Round #377 (Div. 2)D(二分)

    题目链接:http://codeforces.com/contest/732/problem/D 题意: 在m天中要考k个课程, 数组a中有m个元素,表示第a[i]表示第i天可以进行哪门考试,若a[i ...

  7. Gif图片制作

    gif图片是博客中展示项目效果的一种很好的方式,为我们的app制作一张gif图片并不复杂,录制屏幕采用系统自带的QuickTime Player,制作gif采用PicGIF软件.licecap软件更是 ...

  8. Clr Via C#读书笔记---CLR寄宿和应用程序域

    #1 CLR寄宿: 开发CLR时,Microsoft实际是将他实现成包含在一个dll中的COM服务器.Microsoft为CLR定义了一个标准的COM接口,并为该接口和COM服务器分配了GUID.安装 ...

  9. Python 的三目运算

    其他语言:php 判定条件?为真时的结果:为假时的结果 $a=88 $b=99 $res = $a>$b?$a>$b 搞笑的Python:令人意想不到的语法形式 true_value if ...

  10. 【JAVA集合框架之List】

    一.List接口概述. List有个很大的特点就是可以操作角标. 下面开始介绍List接口中相对于Collection接口比较特别的方法.在Collection接口中已经介绍的方法此处就不再赘述. 1 ...