在Postgresql中创建如下表并插入如下数据
CREATE TABLE "TTT" (
ID varchar(32) PRIMARY KEY NOT NULL,
NAME varchar(128) NOT NULL
);
CREATE UNIQUE INDEX TTT_NAME_IDX ON "TTT"(NAME);
insert into "TTT" values('1','A');
insert into "TTT" values('2','a');
insert into "TTT" values('3','B');
insert into "TTT" values('4','b');
此时如果执行
select * from "TTT" order by NAME;
将会得到以下结果
id | name
----------+------------
2 | a
1 | A
4 | b
3 | B
(4 rows)
这里我们期望name的排序是先按大写字母排序,然后再按照小写字母排序。
查了一下资料,可以通过如下操作来解决以上排序问题
1. 首先备份数据库配置文件和数据文件(最好导出数据),默认情况下就是/var/lib/pgsql/data目录下所有东东
2. $ sudo /etc/init.d/postgresql stop
3. $ sudo su - postgres
# initdb --lc-collate=C
4. $ sudo /etc/init.d/postgresql start
5. 再次执行以下查询
select * from "TTT" order by NAME;
结果如下:
id | name
----+------
1 | A
3 | B
2 | a
4 | b
(4 rows)