《Postgresql实战》笔记(二)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 《Postgresql实战》笔记(二)

客户端管理工具

客户端工具主要介绍了pgadmin 4以及psql命令的常见用法,这些内容更建议用到的时候使用,会更加熟练。

  • 连接数据库
  • 导入导出sql:通常使用copy命令导出,
  • 导入或者导出脚本
  • 设置脚本和日常定时启动维护脚本

特殊功能

  • 自动补全,自动补全命令,对于大量不常见命令可以通过自动补全快速敲出命令
  • watch反复执行当前sql,watch 后面跟的参数是秒数,这个命令用于调试和测试的时候比较有用
  • timing:显示sql的执行时间
  • 上下键查看历史命令,许多数据库基本都有的功能,但是这个功能需要编译安装的时候指定readline设置
  • 终端提示,设置当前客户端命令的终端提示,可以按照指定格式存储了解当前登录用户等信息。但是需要注意对于一些存在保密系统的数据库不能显示任何和用户或者服务器相关信息

数据类型

数字类型

postgresql的数字类型对于int类型是按照字节数进行划分,比如int2相当于smallint,int4和多数数据库的int一样,而int8则是bigint类型。

另外decimal和numeric是等效的,定义的时候,有两个参数,前一个表示总位数限制,而后面表示小数位数限制,小数字位可以是0。

浮点类型在日常工作中使用情况不多,对于存储金额场景通常会用更具精确度的decimal,所以double浮点一般表示需要小数但是精度要求不高的数据。

另外有一个比较特殊的变量serial,自增序列准确来说不能算是数据类型,因为在数据变更的时候会内部生成序列号。

字符类型

character varing表示变长,存储的时候会使用实际的长度存储,而char为定长类型,无论数据长度多少,对于未使用部分都会填充空白字符。

如果变长类型不指定长度则可以存储任意长度字符,类似text,而char如果不指定长度默认为1。

虽然是任意的,但是因为一个字段实际能表示的长度是1gb所以大小超过1g的字符是无法存储的。

字符操作函数

  • char_length
  • octet_length
  • position x in xxxx
  • substirng
  • splitpart text text int

时间类型

时间类型可以通过now函数获取当前时间,另外库通过双冒号方式对于列进行转化操作比如下面写法 now():timestamp 的方式转化。除此之外还可以对于时间加减,比如加一天减一天等。

除了这些函数之外Postgre还定义了关键字快速获取当前时间或者时间戳等,比如 current_date. current_time,另外还有一个关键函数extract 获取详细的年月日时分秒等等,具体的使用可以参考文档,提供许多参数获取指定数据,用法案例如下

extract day from now()

其他类型

Postgre还支持很多其他类型的数据类型比如布尔类型,不过Postgre的布尔类型比较坑,TRUE可以表示为 t yes on 1等等花样,都可以当做TRUE。

另外虽然布尔可以插入Null值,但是查询的时候显示的会是f

postgresql支持原生的网络ip存储,这一点挺方便的,因为ip存储通常情况下使用整型存储比较多,对于这个类型不做过多介绍,因为这种特殊类型会影响数据库可移植性。

网络类型

下面是网络类型的操作类型表

另外还有比较有意思的获取网络地址函数,有三个函数可供选择

  • host:取ip
  • text:ip地址和网络掩码
  • network:子网掩码

数组类型

定义数组类型库适应和编程语言一样的方式,比如 a[] 这样的方式

插入数据到数组中也有很多种方式

  1. 通过{1,2,3}这样的形式插入数组数据
  2. 使用关键字array,比如array[1,2,3]

数组删除追加更新

插入数组比较简单,那么这种特殊结构如何更新删除? 这里就需要使用Postgre的函数了

  • 追加数组元素:使用array_append函数往数组添加元素,比如array_append(array[1,2,3],4)这样就把4追加上去了,还有一种是使用双中竖线追加,和字符串的拼接一个操作符,[1,2,3] || 4也可以追加数组元素
  • 更新数组元素:更新数组和多数编程语言一样,update array[3]
  • 删除使用array_remove,案例比如array_remove(array[3])

除了增删改差之外还有其他数组的函数操作,比如获取长度,获取纬度是一维数组还是二维数字,再比如数组替换操作可以参考官方文档。

数组操作符表如下:

范围类型

范围类型专门用于表示数据类型的范围,这个看上去有点奇怪。 范围类型顾名思义就是表示某个数据类型的范围,比如整型数据范围,时间类型的范围。 适应场景为价格区间范围,日期安排等业务有可能用到。

范围类型包含上下界的关系,圆括号表示排除上下线,方括号表示包含上下限。 范围类型的标准是包含下界不包含上界,这点不受到建表的改变影响,也就是说哪怕设计字段包含上下界,显示也是包含下界不包含上界。

根据书中例子也就是[4,7)表示456但是不包含7,这是范围类型标准。

操作符 范围类型操作符比较常用的是 @>表示包含操作符,另外比较常见的操作是使用函数lower和upper获取当前范围类型的上界和下界。

json类型

这个有必要记忆一下,原生json存储支持意味着更好的存储和查询效率,省去转化的开销,但是关于这个类型的细节不少

json查询,Postgre提供丰富的函数和操作符辅助获取json内容:

  • 查询某个键
  • 获取json数据使用name->'col2'
  • 获取原始文本可以使用两个右箭头name->>看上去比较奇怪。

另外Postgre支持两种joson存储,一种是使用jsonb的方式存储,两者的主要区别是存储json存储原文,而jsonb要存储二进制数据,所以写入的时候json快,但是检索的时候jslonb要快一些。

json函数建议用到的时候再去阅读文档了解,这里主要介绍两种追加方式,一种是双竖线追加,另一种是使用 jsonb_set函数追加json。

如果需要删除键值可以使用 # 减号或者-删除指定key。

格式转化函数

有三种格式转化操作:

  1. 通过cast函数进行转化
  2. 通过to_char等数据类型函数追加
  3. 通过双冒号转化数据类型。 个人认为最后一种最为方便
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
25天前
|
架构师 关系型数据库 分布式数据库
实战秘籍 | 《学姐和你一起学PolarDB-X》课程拓展资料(第二讲)
本期课程,由阿里云的开源架构师——黄心雨学姐为大家带来《使用云起实验室体验PolarDB分布式版》,在课后学姐还精心准备了拓展学习资料,供各位开发者们进一步探索和学习,早日成为数据大师!
|
2月前
|
架构师 开发者
实战秘籍 | 《学姐和你一起学PolarDB-X》课程拓展资料(第一讲)
本期课程,由阿里云的开源架构师——王江颖学姐为大家带来《PolarDB-X的架构介绍》,在课后学姐还精心准备了拓展学习资料,供各位开发者们进一步探索和学习,早日成为数据大师!
|
7月前
|
关系型数据库 数据管理 Go
《PostgreSQL数据分区:原理与实战》
《PostgreSQL数据分区:原理与实战》
127 0
|
3月前
|
关系型数据库 网络安全 数据库
《Postgresql实战》笔记(一)
《Postgresql实战》笔记(一)
50 0
|
5月前
|
关系型数据库 分布式数据库 PolarDB
电子好书发您分享《PolarDB for PostgreSQL 从入门到实战》
电子好书发您分享《PolarDB for PostgreSQL 从入门到实战》
65 1
|
5月前
|
关系型数据库 网络安全 数据库
《Postgresql实战》笔记(一)
《Postgresql实战》笔记(一)
52 0
|
7月前
|
JSON Java 关系型数据库
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
100 0
|
7月前
|
Java 关系型数据库 数据库
Spring Boot 学习研究笔记(七) -使用SpringData JPA访问PostgreSql数据库
Spring Boot 学习研究笔记(七) -使用SpringData JPA访问PostgreSql数据库
130 0
|
7月前
|
关系型数据库 Linux 数据库
PostgreSQL学习研究笔记(二)- 安装
PostgreSQL学习研究笔记(二)- 安装
|
2天前
|
关系型数据库 MySQL BI
关系型数据库选择合适的数据库管理系统
关系型数据库选择合适的数据库管理系统
15 4