PostgreSQL 之 区域设置和排序规则

本文详细介绍了PostgreSQL中的区域设置和排序规则,包括它们如何影响数据库的排序顺序、字符处理、函数行为以及索引使用。讨论了不同级别的默认设置(服务器、数据库、域、列)以及在多种情况下如何确定排序规则。强调了非C或非POSIX区域可能带来的性能影响,并提供了创建和使用不同排序规则索引的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 区域设置

区域支持是在使用initdb创建一个数据库集簇时自动被初始化的。

initdb --locale=en_US

默认使用操作系统的区域设置,locale命令显示

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

PostgreSQL中,支持以下配置,自定义本地规则,它们都是initdb的参数。

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

数据库一旦确定LC_COLLATE和LC_CTYPE后就不可修改,因为他们涉及到索引生成的规则。其他的几个可以随时修改,所以只有LC_MESSAGES、LC_MONETARY、LC_NUMERIC、LC_TIME在postgresql.conf中是可配置的。

由于LC_COLLATE和排序顺序相关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值