💡
原文英文,约2500词,阅读约需9分钟。
📝
内容提要
PostgreSQL 17引入了内置的UTF-8区域设置和二进制字符串比较的排序规则。新的排序规则是不可变的,并保证在不同系统上具有一致的排序语义。它支持完整的Unicode字符分类,并提供快速、与操作系统无关的二进制排序。新的排序规则在索引和搜索操作中表现出更快的性能。然而,它不像语言排序规则那样以“人类方式”对字符串进行排序。文章提供了使用新的排序规则的说明,并讨论了它的优点和局限性。
🎯
关键要点
- PostgreSQL 17引入了内置的UTF-8区域设置和二进制字符串比较的排序规则。
- 新排序规则是不可变的,确保在不同系统上具有一致的排序语义。
- 新排序规则支持完整的Unicode字符分类,并提供快速的二进制排序。
- PostgreSQL 17增加了一个内置的排序提供者,提供与C排序相似的排序语义。
- 新提供者的排序规则在索引和搜索操作中表现出更快的性能。
- 使用新排序规则时,创建数据库时需指定locale名称为C.UTF8和提供者为'builtin'。
- 新排序规则在字节比较上使用更少的CPU,性能优于语言比较。
- 二进制排序的主要缺点是无法以“人类方式”对字符串进行排序。
- 使用COLLATE子句可以在查询中实现语言排序。
- 新内置的C.UTF-8区域设置和pg_c_utf8排序规则提供了快速、可移植的Unicode数据库默认设置。
❓
延伸问答
PostgreSQL 17的新排序规则有什么特点?
PostgreSQL 17引入了内置的UTF-8区域设置和二进制字符串比较的排序规则,确保在不同系统上具有一致的排序语义,并支持完整的Unicode字符分类。
如何在PostgreSQL 17中使用新的排序规则?
在创建数据库时,需指定locale名称为C.UTF8和提供者为'builtin',例如使用命令:CREATE DATABASE test locale_provider = 'builtin' builtin_locale = 'C.UTF8' template = 'template0';
新排序规则在性能上有什么优势?
新的排序规则在索引和搜索操作中表现出更快的性能,字节比较使用更少的CPU,性能优于语言比较。
新排序规则的主要缺点是什么?
新排序规则的主要缺点是无法以“人类方式”对字符串进行排序,导致某些字符的排序结果不符合人类的直觉。
如何在查询中实现语言排序?
可以使用COLLATE子句在查询中实现语言排序,例如:SELECT * FROM tablename WHERE columnname = 'some-value' COLLATE pg_c_utf8;
PostgreSQL 17的新排序规则与之前的排序规则有什么不同?
新排序规则提供了与C排序相似的排序语义,但支持完整的Unicode字符分类,并且是不可变的,确保在不同系统上的一致性。
➡️