PostgreSQL之 区域支持
区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等;
PG使用服务器操作系统提供的标准 ISO C 和POSIX的区域机制;
PG区域支持是在使用initdb创建一个数据库集簇时自动被初始化的;
默认情况下,initdb将会按照它的执行环境的区域设置初始化数据库集簇 ;
可以选择initdb数据库集群是指定区域属性。
注:ANSI C:这一标准是 ANSI(美国国家标准局)于 1989 年制定的 C 语言标准。 后来被 ISO(国际标准化组织)接受为标准,因此也称为 ISO C。
POSIX:该标准最初由 IEEE 开发的标准族,部分已经被 ISO 接受为国际标准。POSIX.1 和 POSIX.2 分别定义了 POSIX 兼容操作系统的 C 语言系统接口 以及 shell 和工具标准。
区域
由于国家和本地习惯的不同,在处理文字、日期、数字、货币格式等问题
都会有所不同,计算机中“区域(Locale)”就是用来解决这个问题的。
区域名的形式
language_territory[.codeset]
特殊的区域(C或者POSIX)
locale“C”或“POSIX”是一个可移植的语言环境
它的LC_CTYPE部分对应于7位ASCII字符集
Linux区域设置
通过环境变量(LC_ALL/LC_*/LANG)设置
本地语言的支持依赖于/etc/locale.conf
环境变量的优先级:LC_ALL > LC_* > LANG
其它相关指令
locale #当前系统环境的区域设置
locale –a #获得当前 Glibc 支持的本地字符集
PG数据库固有的区域属性
包括以下三种属性,并且数据库创建后不可变更
可通过psql的”\l”或系统表pg_database查看
postgresql.conf中的区域参数
可通过SHOW命令或系统表pg_settings查看
可通过set命令修改当前会话的参数
可通过pg_ctl reload命令在线全局变更
initdb时可通过参数指定数据库集群的缺省区域和编码,如未明确指定区域和编码,initdb通过OS运行环境判断区域和编码。
创建数据库时默认继承数据库模板template1的区域设置
Encoding
Collate
Ctype
也可以指定其它的区域设置(必须使用template0作为模板)
字符编码,LC_COLLATE和LC_CTYPE在数据库创建后不能变更