PostgreSQL大小写排序问题

2014-11-24 17:59:44 · 作者: · 浏览: 1

在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)