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 中的文本类型检索。

邮件存档

下载