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]

 PostgreSQL之 区域支持

特殊的区域(C或者POSIX)

locale“C”或“POSIX”是一个可移植的语言环境

它的LC_CTYPE部分对应于7位ASCII字符集


Linux区域设置

通过环境变量(LC_ALL/LC_*/LANG)设置

本地语言的支持依赖于/etc/locale.conf

PostgreSQL之 区域支持

环境变量的优先级:LC_ALL > LC_* > LANG

其它相关指令

locale     #当前系统环境的区域设置

locale –a  #获得当前 Glibc 支持的本地字符集

 

PG数据库固有的区域属性

包括以下三种属性,并且数据库创建后不可变更

PostgreSQL之 区域支持

 可通过psql的”\l”或系统表pg_database查看

PostgreSQL之 区域支持


postgresql.conf中的区域参数

PostgreSQL之 区域支持

可通过SHOW命令或系统表pg_settings查看

PostgreSQL之 区域支持 

可通过set命令修改当前会话的参数
PostgreSQL之 区域支持

可通过pg_ctl reload命令在线全局变更


initdb时可通过参数指定数据库集群的缺省区域和编码,如未明确指定区域和编码,initdb通过OS运行环境判断区域和编码。

 PostgreSQL之 区域支持

创建数据库时默认继承数据库模板template1的区域设置

Encoding

Collate

Ctype

 

也可以指定其它的区域设置(必须使用template0作为模板)

PostgreSQL之 区域支持

字符编码,LC_COLLATE和LC_CTYPE在数据库创建后不能变