PostgreSQL中比较冷门的特性(二)

版权声明:本文为博主原创之文章,未经博主允许谢绝转载。 https://blog.csdn.net/pg_hgdb/article/details/81125956

本文继续介绍五个实用的PostgreSQL特性。

一、数组类型

PostgreSQL已经支持数组类型很长时间了。数组类型可以降低样板应用代码的数量和简化查询。

PostgreSQL数组带有运算符和函数,包括聚合函数。还可以在数组表达式上创建索引。

举个例子,创建一张表blogs,其中tags列为数组类型。

postgres=# CREATE TABLE blogs (
postgres(#     title text NOT NULL PRIMARY KEY,
postgres(#     tags  text[]
postgres(# );
CREATE TABLE

然后向这张表中插入多条数据,每行代表一篇博客的数据,包括标题和标签。

然后,就可以通过标签来查找对应的博客有哪些了。

postgres=# SELECT title, tags FROM blogs WHERE '{"database", "array"}' <@ tags; 
       title        |            tags             
---------------------+-----------------------------
 PostgreSQL features | {Postgresql,database,array}
(1 row)

这里我们查找了包含“database”和“array”标签的博客信息。

二、触发器

触发器是一种由事件自动触发执行的特殊的存储过程。当从表中插入,更新或删除行时,可以要求PostgreSQL执行特定的函数。它甚至可以在插入操作的过程中更改数据的值。

关于触发器的使用,有几个需要注意的地方:

1、创建触发器时,先创建触发器的执行函数,再创建这个触发器。

2、语句级触发器是指执行每个SQL时,只执行一次。行触发器指每行会执行一次。

3、删除触发器时,触发器的函数不会被删除。但当表删除时,表上的触发器也会被删除。

4、如果同一事件有多个触发器,则按触发器名字的顺序来触发。

三、pg_stat_statements扩展

pg_stat_statementsPostgreSQL发行版中默认存在的扩展。 此扩展记录了有关每个执行语句的大量信息,包括所用的时间,使用的内存和启动的磁盘I / O. 它对于理解和调试查询性能问题是不可或缺的。

安装和启用此扩展的开销很小,使用起来非常简单,非常建议在生产服务器上运行它!

四、Hash,GINBRIN索引

PostgreSQL中的默认索引类型是B-Tree,但也有其他的索引类型。其他索引类型在某些情况下非常有用。 特别是,设置Hash,GINBRIN类型的索引可能恰好是能解决性能问题的方法。

与具有固有排序的B-Tree索引不同,哈希索引是无序的,只能进行等值匹配(查找)。 但是,对于等值匹配,哈希索引占用的空间要小得多,并且速度比B-Trees快。注意,在PostgreSQL 10之前,无法复制哈希索引它们是未被记录的(unlogged)。

GIN是一个反向索引,它本质上允许单个键的多个值。 GIN索引可用于索引数组,JSON,范围,全文搜索等。

如果数据具有特定的自然顺序(例如,时间序列数据),并且查询通常仅适用于小范围的数据,那么BRIN索引可以以非常小的开销加速查询。 BRIN索引维护每个数据块的范围,允许优化器跳过包含查询不会选择的行的块。

五、全文检索

PostgreSQL可以很好地进行全文检索,包括英语以外的语言。全文索引允许文档被预处理并且保存一个索引用于以后快速的搜索。PostgreSQL提供了一种数据类型tsvector来存储预处理后的文档,还提供了一种类型tsquery来表示处理过的查询。有很多函数和操作符可以用于这些数据类型,其中最重要的是匹配操作符@@。

 

By Kalath

猜你喜欢

转载自blog.csdn.net/pg_hgdb/article/details/81125956