当前位置 博文首页 > weixin_ccjz9527的博客:postgres-数据类型-您应该考虑使用

    weixin_ccjz9527的博客:postgres-数据类型-您应该考虑使用

    作者:[db:作者] 时间:2021-07-05 18:59

    Postgres是一个丰富而强大的数据库。 而且,PostgreSQL扩展APIs的存在使得Postgres能够将其功能扩展到传统关系数据库之外。 如今流行的Postgres扩展的例子包括HyperLogLog,它以较小的占用空间为您提供近似的区别-通过PostGIS提供丰富的地理空间支持Citus,它帮助您跨多个节点扩展Postgres数据库,以提高多租户SaaS应用程序和实时分析仪表板的性能,以及PostgreSQL中内置的全文搜索功能。 有了这些花哨的东西,你就可以分层进入Postgres,有时,最基本的内置功能会被忽略。

    PostgreSQL有近100种不同的数据类型,这些数据类型可以有自己的优化索引或自己的专用函数。 您可能已经使用了一些基础知识,例如整数和文本,今天我们将对使用较少但非常强大的PostgreSQL数据类型进行调查。

    Postgres在Postgres 9中首次获得JSON支持。2. 但是,JSON中的初始支持。2是关于JSON验证的,因此对于许多需要JSON和快速查询性能的用例来说不太理想。

    数据同步

    几年后,我们得到了JSON数据类型的继承者:JSONB。 JSONB是存储在磁盘上的JSON的二进制版本。 JSON进行压缩,因此会丢失空白,但是它附带了一些强大的索引类型,允许您更灵活地处理JSON数据。

    JSONB非常适合非结构化数据,使用Postgres,您可以轻松地将JSONB数据加入到其他关系模型中。 我们自己在Citus中大量使用JSONB来处理诸如特征标志、事件观察数据和记录日志之类的事情。 您可以使用GIN索引对JSONB数据进行索引,这允许您查询关键字并加快查找速度,因为GIN索引会自动为您提供完整的文档。

    让我们面对现实吧——以任何方式处理时间都很难。 在处理时间范围时,挑战可能会更大:如何确保您的会议日程安排不会在给定的房间里同时安排两次会谈? 你如何确保每个月只有一张发票? 对于范围类型,该值有一个从和到值或一个范围。 您可以有数字范围,如1-20,或时间戳范围。 下次当数据库中有两列的起始值或起始值时,请考虑使用时间戳范围。

    一旦你有了你的时间戳范围,确保设置你的约束来执行你所寻找的数据完整性。

    知道插入到数据库中的值是有效的,这与灵活性同样重要。 枚举数据类型(枚举)是某些很少改变的值的很好的候选。 使用枚举,您首先定义类型,然后在创建表时使用该类型。 发票状态就是一个很好的例子。 首先,您可以创建您的枚举类型,在本例中称为:

    
    

    然后,在发票表上,您可以使用新创建的枚举类型作为列类型:

    
    

    在内部,对于我们的Citus Cloud数据库作为服务的操作,我们使用枚举来表示发票状态,对于我们支持的AWS区域,我们很少更改,添加另一个表来加入可能会有些过分。

    无论是IP地址、时间戳、UUID还是其他数据类型,如果您的应用程序中有数据类型,请考虑在Postgres中使用该数据类型的等效匹配。 通过使用Postgres数据类型,您可以最大限度地利用和灵活利用您的数据库,使用Postgres,您可以记录数据类型的功能和特性的改进情况,您的世界只会变得更好。

    cs