Gsoc08-collation
来自 PostgreSQL wiki
跳转到导航跳转到搜索提案
摘要
当前版本的 PostgreSQL 仅支持每个数据库集群一个排序规则,该排序规则由 initdb 设置。这无法满足某些开发多语言应用程序用户的需求。
这项工作的目标是在数据库级别实现排序规则,并为进一步的国家语言支持开发奠定基础。用户将能够在创建数据库时设置排序规则,或更改现有数据库的排序规则。特别是,命令 CREATE DATABASE... COLLATE … 和 ALTER DATABASE … COLLATE … 符合 ANSI 标准。这项工作也将实现创建用户自己的排序规则集合的可能性 - 命令 CREATE COLLATION … FROM … USING 和 DROP COLLATION 符合 ANSI 标准。
更多信息
这项工作将用作我的学士学位论文。更好地了解 PostgreSQL 的内部工作原理将对我来说是一次很好的体验。我将继续作为硕士论文在这个项目上工作,并添加更多功能。我们的目标是实现每列的排序规则。为了我的这个工作,我在 2008 年 Google 暑期实习计划中申请,将实现数据库级别的排序规则功能,并为进一步的多语言支持开发奠定基础。这对开源社区将是一个重大优势。
我工作的第一部分已经完成,并作为 Alexey Slynko 贡献的补丁 的一部分提交。我现在正处于添加排序规则目录的阶段,这对于进一步的多语言支持非常重要。
用户和开发人员一直在要求改进多语言支持。这个需求已经添加到 PostgreSQL 官方 TODO 列表 中。
实现
目录
- 将定义新的目录 pg_collation
- pg_collation 将包含 SQL 标准排序规则 + 可选的默认排序规则(如果设置为非 SQL 标准排序规则)
- pg_type、pg_attribute、pg_namespace 将扩展为包含对 pg_collation 中默认记录的引用
initdb
- pg_collation 将包含预定义的记录,这些记录与 SQL 标准相关联,并可选地包含一条记录,该记录将在创建 initdb 时设置为非标准记录(使用系统语言环境的记录)
- 该记录将被 pg_type、pg_attribute、pg_namespace 在相关列中引用,并将被视为默认排序规则,该排序规则将被继承
CREATE DATABASE ... COLLATE ...
- 复制新数据库后,排序规则将为默认值(与集群排序规则相同)或由 COLLATE 语句更改。然后,我们更新 pg_type、pg_attribute 和 pg_namespace 目录
- 重新索引数据库
更改数据库时,数据库排序规则将从 pg_type 中的文本类型检索。
邮件存档
- 数据库级别的排序规则(2008 年 4 月 16 日)
- 提案 - 数据库级别的排序规则(2008 年 5 月 28 日)
- [WIP] 补丁 - 数据库级别的排序规则(2008 年 7 月 1 日)
- [WIP] 重新审视排序规则支持(2008 年 7 月 10 日)