《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
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
31 2
zabbix agent集成percona监控MySQL的插件实战案例
|
2月前
|
SQL 关系型数据库 MySQL
干货!python与MySQL数据库的交互实战
干货!python与MySQL数据库的交互实战
|
2月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
31 2
|
2月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
3月前
|
JavaScript 关系型数据库 API
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
这篇文章介绍了什么是Prisma以及如何在Node.js和TypeScript后端应用中使用它。Prisma是一个开源的下一代ORM,包含PrismaClient、PrismaMigrate、PrismaStudio等部分。文章详细叙述了安装PrismaCLI和依赖包、初始化Prisma、连接数据库、定义Prisma模型、创建Prisma模块的过程,并对比了Prisma和Sequelize在Nest.js中的使用体验,认为Prisma更加便捷高效,没有繁琐的配置。
116 7
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
|
2月前
|
关系型数据库 MySQL Linux
【一键解锁神秘力量!】CentOS 7 通过编译源码方式安装 MySQL 数据库 —— 从零到英雄的数据库安装实战秘籍!
【8月更文挑战第9天】随着业务增长,对数据库的需求日益提高。在 CentOS 7 中,通过编译源码安装 MySQL 可提供更高定制性和灵活性。本文详细介绍从准备环境、下载源码、配置编译参数到安装 MySQL 的全过程,并对比 RPM 包安装方法,帮助读者根据需求选择合适方案。实践时需注意备份数据、选择合适版本、确保安全性和调优性能等要点。
151 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶实战:解锁性能飙升秘籍,从菜鸟到高手的华丽蜕变,让数据操作如行云流水!
【8月更文挑战第5天】MySQL是最流行的开源关系型数据库之一,在Web开发与数据分析等领域广泛应用。本文通过实战代码示例,深入探讨MySQL进阶技能:包括索引优化以提升查询性能;利用JOIN与子查询处理多表关联数据;通过事务处理确保数据一致性;使用存储过程与函数封装复杂逻辑以便重用;设置触发器自动执行特定任务以维护数据完整性。掌握这些技能能显著提高数据处理效率与系统性能。
44 5
|
2月前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
374 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL中的DISTINCT与GROUP BY:效率之争与实战应用
【8月更文挑战第12天】在数据库查询优化中,DISTINCT和GROUP BY常常被用来去重或聚合数据,但它们在实现方式和性能表现上却各有千秋。本文将深入探讨两者在MySQL中的效率差异,结合工作学习中的实际案例,为您呈现一场技术干货分享。
242 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL性能优化实战:从索引策略到查询优化
MySQL性能优化聚焦索引策略和查询优化。创建索引如`CREATE INDEX idx_user_id ON users(user_id)`可加速检索;复合索引考虑字段顺序,如`idx_name ON users(last_name, first_name)`。使用`EXPLAIN`分析查询效率,避免全表扫描和大量`OFFSET`。通过子查询优化分页,如LIMIT配合内部排序。定期审查和调整策略以提升响应速度和降低资源消耗。【6月更文挑战第22天】
616 2
下一篇
无影云桌面