PostgreSQL 10.1 手册_部分 III. 服务器管理_第 23 章 本地化_23.1. 区域支持

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 23.1. 区域支持 23.1.1. 概述 23.1.2. 行为 23.1.3. 问题 区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等。PostgreSQL使用服务器操作系统提供的标准 ISO C 和POSIX的区域机制。

23.1. 区域支持

区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等。PostgreSQL使用服务器操作系统提供的标准 ISO C 和POSIX的区域机制。更多的信息请参考你的系统的文档。

23.1.1. 概述

区域支持是在使用initdb创建一个数据库集簇时自动被初始化的。默认情况下,initdb将会按照它的执行环境的区域设置初始化数据库集簇; 因此如果你的系统已经设置为你的数据库集簇想要使用的区域, 那么你就没有什么可干的。如果你想使用其它的区域(或者你还不知道你的系统设置的区域是什么),那么你可以用--locale选项准确地告诉initdb你要用哪一个区域。 比如:

initdb --locale=sv_SE

这个Unix系统上的例子把区域设置为瑞典(SE)瑞典语(sv)。 其他的可能性包括 en_US(美国英语)和fr_CA(加拿大法语)。如果有多于一种字符集可以用于区域,那么声明可以采用如下的形式:language_territory.codeset。例如fr_BE.UTF-8表示在比利时(BE)讲的法语(fr),使用一个UTF-8字符集编码。

在你的系统上有哪些区域可用取决于操作系统提供商提供了什么以及安装了什么。在大部分Unix系统上,命令locale -a将会提供一个所有可用区域的列表。Windows使用一些更繁琐的区域名,例如German_Germany或者Swedish_Sweden.1252,但是其原则是相同的。

有时候,把几种区域规则混合起来也很有用,比如,使用英语排序规则而用西班牙语消息。 为了支持这些,我们有一套区域子类用于控制本地化规则的某些方面:

LC_COLLATE 字符串排序顺序
LC_CTYPE 字符分类(什么是一个字符?它的大写形式是否等效?)
LC_MESSAGES 消息使用的语言Language of messages
LC_MONETARY 货币数量使用的格式
LC_NUMERIC 数字的格式
LC_TIME 日期和时间的格式

这些类名转换成initdb的选项名来覆盖某个特定分类的区域选择。比如,要把区域设置为加拿大法语,但使用 U.S. 规则格式化货币,可以使用initdb --locale=fr_CA --lc-monetary=en_US

如果你想让系统表现得象没有区域支持,那么使用特殊的区域名C或者等效的POSIX

一些区域分类的值必需在数据库被创建时的就被固定。你可以为不同的数据库使用不同的设置,但是一旦一个数据库被创建,你就不能在数据库上修改这些区域分类的值。LC_COLLATELC_CTYPE就是这样的分类。它们影响索引的排序顺序,因此它们必需保持固定, 否则在文本列上的索引将会崩溃(但是你可以使用排序规则放松这种限制,讨论见第 23.2 节)。这些分类的默认值在initdb运行时被确定,并且这些值在新数据库被创建时使用,除非在CREATE DATABASE命令中特别指定。

其它区域分类可以在任何时候被更改,更改的方式是设置与区域分类同名的服务器配置参数(详见第 19.11.2 节)。被initdb选中的值实际上只是被写入到配置文件postgresql.conf中作为服务器启动时的默认值。如果你将这些赋值从postgresql.conf中除去,那么服务器将会从其执行环境中继承该设置。

请注意服务器的区域行为是由它看到的环境变量决定的,而不是由任何客户端的环境变量影响的。 因此,我们要在启动服务器之前认真地设置好这些变量。这样带来的一种后果是如果客户端和服务器设置成不同的区域, 那么消息可能以不同的语言呈现,实际情况取决于它们的起源地。

注意

在我们谈到从执行环境继承区域的时候,我们的意思是在大多数操作系统上的下列动作: 对于一个给定的区域分类,比如排序规则,按照下面的顺序评估这些环境变量, 直到找到一个被设置了的:LC_ALL、 LC_COLLATE(或者对应于相应分类的变量)、LANG。如果这些环境变量一个都没有被设置,那么将区域缺省设置为C

一些消息本地化库也查看环境变量LANGUAGE,它覆盖所有其它用于设置消息语言的区域设置。如果有疑问, 请参考你的操作系统的文档,特别是有关gettext的文档。

要允许消息被翻译成用户喜欢的语言,编译时必需打开NLS(configure --enable-nls)。所有其他区域支持都会被自动编译。

23.1.2. 行为

区域设置特别影响下面的 SQL 特性:

  • 在文本数据上使用ORDER BY或标准比较操作符的查询中的排序顺序

  • 函数upperlowerinitcap

  • 模式匹配操作符(LIKESIMILAR TO和POSIX风格的正则表达式);区域影响大小写不敏感匹配和通过字符类正则表达式的字符分类

  • to_char函数家族

  • LIKE子句使用索引的能力

PostgreSQL中使用非C或非POSIX区域的缺点是性能影响。它降低了字符处理的速度并且阻止了在LIKE中对普通索引的使用。因此,只能在真正需要的时候才使用它。

作为允许PostgreSQL在非 C 区域下为LIKE子句使用索引, 有好几种自定义操作符类可用。这些操作符类允许创建一个执行严格按字符比较的索引。详见第 11.9 节。另一种方法是创建使用C排序规则的索引,如第 23.2 节所讨论的。

23.1.3. 问题

如果根据上面解释区域支持仍然不能运转,检查一下操作系统的区域支持是否被正确配置。 要检查系统中安装了哪些区域,你可以使用命令locale -a(如果你的操作系统提供了该命令)。

请检查PostgreSQL确实正在使用你认为它该用的区域设置。LC_COLLATELC_CTYPE设置都是在数据库创建时决定的,并且在除了创建数据库之外的操作中都不能被更改。其它的区域设置包括LC_MESSAGESLC_MONETARY都是由服务器启动的环境决定的, 但是可以在运行时修改。你可以用SHOW命令检查活跃的区域设置。

源代码目录的src/test/locale中包含PostgreSQL的区域支持的测试套件。

那些通过分析错误消息来处理服务器端错误的客户端应用很明显会有问题,因为服务器来的消息可能会是以不同语言表示的。 我们建议这类应用的开发人员改用错误代码机制。

维护消息翻译目录需要许多志愿者的坚持不懈的努力, 他们希望PostgreSQL以他们的语言说话。 如果以你的语言表示的消息目前还不可用或者没有完全翻译完成,那么我们很感谢你的协助。如果你想帮忙,那么请参考第 54 章或者向开发者邮递列表发邮件。

本文转自PostgreSQL中文社区,原文链接: 23.1. 区域支持
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
关系型数据库 MySQL
Mysql基础第三十天,全球化和本地化
Mysql基础第三十天,全球化和本地化
25 0
Mysql基础第三十天,全球化和本地化
|
3月前
|
弹性计算 关系型数据库 数据库
开源PostgreSQL在倚天ECS上的最佳优化实践
本文基于倚天ECS硬件平台,以自顶向下的方式从上层应用、到基础软件,再到底层芯片硬件,通过应用与芯片的硬件特性的亲和性分析,实现PostgreSQL与倚天芯片软硬协同的深度优化,充分使能倚天硬件性能,帮助开源PostgreSQL应用实现性能提升。
|
4月前
|
Java 关系型数据库 MySQL
【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目
【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目
112 0
|
4月前
|
关系型数据库 MySQL 数据库
史上最全的MySQL性能手册(优化+SQL+并发+数据库)
史上最全的MySQL性能手册(优化+SQL+并发+数据库)
|
6月前
|
JSON 安全 关系型数据库
MySQL 8.0 参考手册— 内置函数和运算符参考
MySQL 8.0 参考手册— 内置函数和运算符参考
47 0
|
7月前
|
关系型数据库 MySQL
Github上标星68.5K,阿里巴巴《MySQL成长手册》火了
MySQL为什么能如此火爆? 成本,MySQL是开源的,他可以免费使用。 性能,MySQL快不快大家应该都有体会。 可靠性,超级大厂都在用它来处理重要数据,放心用就行; 简单,安装使用都非常简单
|
7月前
|
存储 SQL 关系型数据库
MD牛!阿里多位资深MySQL专家撰写的437页MySQL技术内幕分享手册
MySQL数据库的体系结构 MySQL由以下几部分组成: 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲(Cache)组件 插件式存储引擎 物理文件
61 0
|
8月前
|
SQL 存储 关系型数据库
MySQL手册 4
MySQL手册
129 0
|
8月前
|
存储 关系型数据库 MySQL
MySQL手册 3
MySQL手册
|
8月前
|
存储 关系型数据库 MySQL
MySQL手册 2
MySQL手册

热门文章

最新文章