PostgreSQL基础知识( 七 )


个:columns 视图,列出了数据库中的所有字段; tables 视图,列出
了数据库中的所有表(包括视图);views 视图,列出了所有视图以及
用于创建该视图的原始 SQL 。
类型
类型是数据类型的简称 。每种数据库产品和每种编程语言都会支持
一系列的数据类型,比如整型、字符型、数组、二进制大对象(blob)
等 。除前述常见类型外,PostgreSQL 还支持复合数据类型,这种类型可
以是多种数据类型的一个组合,比如复数、极坐标、向量、张量等都是
复合数据类型 。
PostgreSQL 会自动为用户自己创建的表定义一个同名的复合数据类
型 。这样就可以把表记录当作对象实例来处理 。当用户需要在函数中遍历表记录时,该特性特别注意:在 pgAdmin 的界面上你看不到
这些在创建表时自动生成的自定义类型,但请放心,这并不代表它们不
存在 。
全文检索
全文检索(full text search,FTS)是一种基于自然语言的搜索机
制 。这种搜索机制有一些“智能”成分 。与正则表达式搜索不同,全文检
索能够基于语义来进行匹配查找,而不仅仅是纯粹的语法匹配 。例如,
用户需要在一段长文本中搜索 running 这个词,那么命中的结果可能包
含 run、running、jog、sprint、dash 等词 。全文检索功能依赖于 FTS 配
置库、FTS 词典、FTS 解析器这三个部件 。有了它们,PostgreSQL 原生
的 FTS 功能即可正常使用 。一般场景下的全文检索靠这三个原生部件
已经足够,但在涉及药理学、有组织犯罪学等专业场景下,搜索目标文
本中会包括该领域专有词汇和特殊语法规则,此时需要用专门的
FTS
部件来替换原生 FTS 部件 。我们会在 5.8 节探讨 FTS 功能 。
数据类型转换器
数据类型转换器可以将一种数据类型转换为另一种,其底层通过调
用转换函数来实现真正的转换逻辑 。PostgreSQL 支持用户自定义转换器
或者重载、加强默认的转换器 。例如,如果你需要把邮政编码(美国的
邮政编码是一个 5 位的整数)从 integer 转换为 character,那么可
以自定义一个支持“数字不足 5 位则前面自动补 0”规则的转换器 。
转换器可以被隐式调用也可以被显式调用 。隐式转换是系统自动执
行的,一般来说,将一种特定数据类型转为更通用的数据类型(比如数
字转换为字符串)时就会发生隐式类型转换 。如果进行隐式转换时系统
找不到合适的转换器,你就必须显式执行转换动作 。序列号生成器
序列号生成器用于实现 serial 数据类型值的自动递增分配 。在创
建 serial 字段时,PostgreSQL 会自动为其创建一个相应的序列号生成
器,但用户也可以很方便地更改其初始值、步长和下一个值 。因为序列
号生成器是独立对象,所以多个表可以共享同一个序列号生成器 。基于
该机制,用户可以实现跨越多个表的唯一键 。SQL Server 和 Oracle 也都
支持序列号生成器,但必须手动创建 。
规则
规则的功能是在一个 SQL 执行前对其进行改写 。本书中不会讨论
有关规则的内容,因为这一技术已经过时,通过触发器能实现相同的功
能 。
PostgreSQL 允许用户对前述每一种对象进行参数配置 。这些参数可以在
服务级、库级、函数级等不同层级生效 。你将来很可能会看到一个很炫
的词叫 GUC,意思是“大一统配置”(grand unified configuration),它
实际上指的就是 PostgreSQL 中的那些配置参数 。1.6 最新版本的PostgreSQL中引入的新特性
PostgreSQL 在每年的 9 月份会发布一个大版本 。每个新版本都会带来稳
定性、安全性、性能等方面的提升,以及一些前沿的新特性 。而且版本
升级过程也变得越来越简单 。那么显而易见,请尽量把你的数据库及时
升级到最新的稳定版 。关于每个版本引入的关键特性列表,请参见官方
提供的“PostgreSQL 各版本功能特性一览表” 。
1.6.1 为什么要升级
如果你正在使用 PostgreSQL 9.1 或者更早的版本,请立即升级!因为
9.1 版在 2016 年 9 月已进入生命周期终结(end of life,EOL)状态 。请
参考 PostgreSQL 官方的发行版支持策略以获取更多关于 PostgreSQL
EOL 政策的细节 。请务必不要使用已过了 EOL 期限的版本,因为开发
组不会再为其提供新的安全更新和功能补丁 。一旦这种老版本出了问


推荐阅读