分享人:Digoal 阿里云资深数据库专家
正文:主要介绍了PG扩展类型等,以及如何学习、上报错误。
一、扩展语法、类型、索引、存储过程、函数
之前讲过pg扩展类型,除了普通类型,还有number,字符串、时间戳、货币类型、枚举类型、几何类型、网络类型、map类型、全文检索类型、json数组、自定复合类型,比如在数据库里描述一个游戏里面的角色,它有很多属性组成,可以定义角色类型的属性、技能、血量,精力等。我们可以定义到复合类型里面去叫composite类型,可以制定范围类型,智能dns的业务,它是用两个字段来去表述一个ip地址的范围,查询的时候用的是两个字段的联合索引,一个八核的机器能达到三千多的qps。使用范围类型和索引能够达到八万多的qps,这个就是范围类型。范围类型通常会用在像物联网边界最大值、最小值这种区间数据,还可以用在智能解析纯ip地址段,还可以存时间段,比如会议室的预定系统,会议室在哪个时间段被谁预订了,这里就存时间区间。用排他索引做插入,用这种排他的约束防止同一个会议室被多人同时订到。
我们用大类型去做约束,新建domain类型在数据范围的约束空间MySQL的类型完全一模一样。email地址有固定的格式,通常用text文本存email地址,但文本不能约束email的格式,用户可以随便填,只能在应用端去控制约束它,使用domain类型就能在数据库里强制约束。用户输入有效的email地址,在数据库里创建一个domain的类型约束它。
每种类型都有对应的function,看下字符串类型,字符串类型里有正则表达式, like、 similar都是正则表达式,在第9章里有详细介绍, replace函数、match函数等,还支持聚合函数,窗口函数子查询的表达式,还有行、数组,还有触发器、函数事件、触发器、函数等扩展的语法类型索引。
看第19章,pg里面支持哪些参数在server configuration里面有介绍,还有数据库如何做备份还原,第25章如何做嵌入式的开发,第35章如何写存储过程,第42章如何写函数。如果想用pl python写过程,就要了解pl python是怎么使用的?如果喜欢用tcl语言写存储过程,就要了解pl tcl。下面是SQLcommand的介绍,各种语法索引的具体介绍。
我的建议是要了解清楚这个文档的目录结构,你了解清楚了它的文档的目录结构之后,下次找问题时就容易找到它。
二、书、在线文档
这有三本书是循序渐进的,大家可以去看。初学者来建议去看这本《PostgreSQL 实战》,这本书学完后可以看《PostgreSQL 指南 内幕探索》,可以了解内部的设计原理,包括存储结构、内部存储结构的数据、索引结构、事物、多版本机制等。这两本书看完后并且理解了80%以上,可以去看《PostgreSQL 数据库内核分析》,这本书可以帮助我们去了解pg数据库内核的各个模块代码是如何构建的,如果要修改pg数据库源码的话,这本书可以解决这部分问题,如果这三本书都吃透了,那么大多数的pg问题都可以自己解决了。
我对在线文档也做了一个排序,第一本书是比较老的,他写的还是比较全面,跟很多新的版本不太一样了,我建议大家去看一下,可以把它当成了解pg概念入门一样的书。
第二个在线文档面向于数据库的应用开发者,要了解数据库使用、语法、编程语言、驱动配置等,在线文档里面有比较全面的介绍。
第三个在线文档是《PostgreSQL指南内幕探索》,这本书本是从这个网站翻译过来的,这个日本的b这个网站的它是翻译过来的,因为中英文翻译的差异,看完中文之后,可以再去看一下原版,。
第四个是网站,除了分享的书,还有峰会的分享, ppt也可以下载,可以拓展更多的视野。
第五个是我写的千篇博客,各方面的内容都有,学习数据库比较枯燥的,但我的博客里有很多书上或网站上没有的东西,比如case可以拓展大家的视野,可以结合上面的内容挑选着看。
最后一个是官方文档,除了有问题时去翻阅它,平时有时也可以体系化的去学习,比如在文档里有内容我们不能理解的时候,可以去看一下内核代码,还
可以在pg里做实验来验证我们的想法,通过这两点基本能够自己解决很多疑惑,如果自己解决不了,也可以到我们社区里交流。
三、Oracle转型学习路径
第三部分是专门讲oracle的,在企业里形成了降低成本的趋势,国内有用pg去oracle的企业,都是非常复杂的场景,比如邮储银行、平安这两家企业就是典型的金融行业的代表,在*行业、制造业的惠普、丰田,在pg里面核心系统有大量的应用, pg和oracle都是企业级的数据库,面向复杂场景像用友、金蝶、sap等做企业erp的或者企业财务软件的,他们有很复杂的场景对数据的可靠性要求非常高,他们都能使用pg完成核心系统的替换,目前各个行业里面其实都可以使用pg来替换。
对于oracle的技术栈来说,如何转换技术栈切换到pg里面呢?举个例子,以前有个同事是从oracle技术栈转换过来的,之前是做电信oracle系统维护的,换到互联网公司,从0~1开始用一个月的时间就开始逐渐维护管理内部的系统了。
oracle跟pg在架构上非常相似,它是进程模型,有自己的后台管理进程,支持redo、归档,可以做物理的在线备份,支持时间点的还原,支持只读实例、都有后台的wa、redo的writer、background writer,、 checkpoint进程,其实架构非常像, pg数据库对原来使用oracle技术站的同学来说,也不会特别陌生,切换成本是比较低的。
用一个月的时间去了解链接里面的内容。
要自己去摸索去使用,如何安装,
了解它的使用、客户端,p sql对应的是plus,p sql比plus好用100倍,它有很多快捷命令,内部支持客户端编程, p sql本身支持简单的编程。
还要了解如何配置,如何优化数据库,各种场景,可以自己去做压测,发现数据库如何去调优。
四、应用场景实践视频
应用场景实践分两部分内容,一是应用场景的实践-沙箱的实验,针对每一个特殊的pg适合的业务场景,这里做了一些demo,告诉大家如何使用这些场景,在这堂课里也讲过秒杀、实时搜索、多维分析、用户画像、并行计算、空间应用实践、,时空、时空调度、图式关系、采样脱敏等,这里提到很多的实际的业务场景告诉大家如何用,都有demo都有对应的视频讲解。
这个《如来神掌》是我总结的pg在各个方面的使用介绍。
第一部分是案例,第二部分是问题诊断性能优化,第三部分是数据库的原理,第四部分是数据库的发展方向以及选型,第五部分是开发技巧等,总共分了九个部分,包含备份恢复升级、安全审计、技巧、实例文档等。
五、体系化学习视频
看一下知识图谱,里面有pg的历史、社区、安装使用、实例初始化、基本的配置、应用开发指南、索引、索引的应用、性能的压测,、备份恢复、容灾等,这是一个体系化的学习过程。
六、数据库管理、开发规约
这是数据库的管理和开发规约,是我总结在使用开发应用的时候,在数据库里应该注意哪些问题,包括数据库的安全、数据库的开发规范。
这是数据库的管理和开发规约,是我总结在使用开发应用的时候,在数据库里应该注意哪些问题,包括数据库的安全、数据库的开发规范。
七、如何上报问题
如果我们遇到问题,特别是遇到bug,如何把bug报给社区,这里分两个部分,一是如何获得更加详细的错误信息,比如在数据库里有一个报错,告诉你没有上面这部分信息,看完之后不知道他在讲什么或者可能不知道他在讲什么,但大多数时候是知道的。我们可以加这个VERBOSITY变量,把它设置为verbose,设置后报错是从哪个代码里面报出来的。
比如说错误是errorMissingColumn,如果还是不能理解这个错误函数,就可以把这个代码打开,它告诉你是在第3293行上面的错误,可以去阅读第3293行,这个点c文件里面到底是什么。
拿到这个错误的error code后,想知道报错的详细背景原因,可以去查pg的手册,手册里面有每一个l code,这个是undefined,这个列名没有定义。
如果是用java来开发应用程序,在java里面也会吐出一些信息来。java和pg里面吐出来的信息不能完全一一对应,他可能没有把所有错误代码都封装进来, java可能会遇到没有错误的解释和代码,这时候得到数据库的后台日志里面去看,在java的api文档里可以看到不同的PSQLState错误代码的定义,可以去看对照表拿到对应的错误的信息。
八、异常、BUG报告
如果看到了这样的错误,或者数据库崩了的情况。第一可以去查看文件,它会告诉是哪个调用的哪里出了什么问题。如果要上报给社区的话,要把错误内容也告诉社区,让大家来帮你做分析。第二如果遇到异常后上报社区?内容应该怎么写呢?内容的建议分为四个部分:
第一是要描述清楚这个问题的环境,包括操作、内核的版本、32位还是64位。第二要包括数据库的版本,报错插件名称、插件的版本。第三个是描述问题,你的问题、报错内容、现象都是什么。如果这个问题能复现,一定要把复现的步骤写清楚,社区的commit可以在它自己的环境里面去复现,更容易去排查。第四是礼貌用语,最后结束的时候要带上礼貌的反馈。
上报问题得在官网,这是一个上报bug的页面,名字、邮件地址、出问题数据库的版本、操作系统、简短描述、详细描述,还有刚才提到的几个要点、问题、现象、复现的步骤,就可以了。上报后可以在bug list里面找到上报的问题。负责bug list后台的人认定这是一个bug,他就会和大家做交流,就能够在这里看到了,每一个月会做一个归档。