《Postgresql实战》笔记(二)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 《Postgresql实战》笔记(二)

客户端管理工具



一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情。 客户端工具主要介绍了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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
183 66
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
294 1
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
97 5
|
2月前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
126 1
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
125 0
|
3月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
86 2
zabbix agent集成percona监控MySQL的插件实战案例
|
4月前
|
SQL 关系型数据库 MySQL
干货!python与MySQL数据库的交互实战
干货!python与MySQL数据库的交互实战
|
4月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
98 2
|
4月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
5月前
|
JavaScript 关系型数据库 API
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
这篇文章介绍了什么是Prisma以及如何在Node.js和TypeScript后端应用中使用它。Prisma是一个开源的下一代ORM,包含PrismaClient、PrismaMigrate、PrismaStudio等部分。文章详细叙述了安装PrismaCLI和依赖包、初始化Prisma、连接数据库、定义Prisma模型、创建Prisma模块的过程,并对比了Prisma和Sequelize在Nest.js中的使用体验,认为Prisma更加便捷高效,没有繁琐的配置。
218 7
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库