复合类型

  • 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. 【工具】 原版完美激活 Flash builder 4.7 【非破解激活】

    此方法原理在于激活 FlashBuilder 4.7 而不是破解(靠修改文件,或改变版本号),所以此破解更加稳定! FlashBuilder 4.7 下载地址: 32bit:http://trials ...

  2. 142. Linked List Cycle II

    题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...

  3. MFC 使用MFC EditBrowse Control控件选择文件或者文件夹

    从工具箱中拖拽一个MFC EditBrowse Control到窗体中, 通过设置“Browse Mode”属性指定“文件浏览”还是“文件夹浏览” 可以通过添加对象的方式将其与一个CString se ...

  4. chrome进入控制台时自动进入断点模式的解决方法

    简单粗暴,不知道为什么,去掉那个√就好了

  5. Ubuntu自定义服务

    1.准备脚本 准备好一个bash服务脚本,包括start|stop|restart等参数,将脚本文件命名为“服务名”,拷贝到/etc/init.d/目录下. 2.添加服务sudo update-rc. ...

  6. android bitmap的放大缩小

    private static Bitmap big(Bitmap bitmap) { Matrix matrix = new Matrix(); matrix.postScale(1.5f,1.5f) ...

  7. python简介

    python起源 作者Guido van Rossum,荷兰人 在创建python之初,1989年12月份,Guido只是想用编程来打发圣诞的闲暇时光.Guido也希望能有一门语言既能够像C语言那样, ...

  8. 三、jQuery--jQuery基础--jQuery基础课程--第8章 jQuery 实现Ajax应用

    1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:load(url,[data],[callback]) ...

  9. 查看局域网内在线的主机ip和mac地址

    ]# nmap -sP Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-12 22:43 CST Nmap scan report for 192. ...

  10. Nginx反向代理设置 从80端口转向其他端口

    [root@localhost bin]# netstat -lnutp Active Internet connections (only servers) Proto Recv-Q Send-Q ...