我有一个 postgresql 9.1 数据库表,“en_US.UTF-8”:
CREATE TABLE branch_language
(
id serial NOT NULL,
name_language character varying(128) NOT NULL,
branch_id integer NOT NULL,
language_id integer NOT NULL,
....
)
属性 name_language 包含各种语言的名称。语言由外键 language_id 指定。
我创建了一些索引:
/* us english */
CREATE INDEX idx_branch_language_2
ON branch_language
USING btree
(name_language COLLATE pg_catalog."en_US" );
/* catalan */
CREATE INDEX idx_branch_language_5
ON branch_language
USING btree
(name_language COLLATE pg_catalog."ca_ES" );
/* portuguese */
CREATE INDEX idx_branch_language_6
ON branch_language
USING btree
(name_language COLLATE pg_catalog."pt_PT" );
现在,当我进行选择时,我没有得到我期望的结果。
select name_language from branch_language
where language_id=42 -- id of catalan language
order by name_language collate "ca_ES" -- use ca_ES collation
这会生成一个名称列表,但不是按照我预期的顺序:
Aficions i Joguines
Agència de viatges
Aliments i Subministraments
Aparells elèctrics i il luminació
Art i Antiguitats
Articles de la llar
Bars i Restaurants
...
Tabac
Àudio, Vídeo, CD i DVD
Òptica
正如我预期的最后两个条目出现在列表中的不同位置。
创建索引有效。除非您想优化性能,否则我认为它们并不是真正必要的。
然而,select 语句似乎忽略了这部分:collate "ca_ES"。
当我选择其他排序规则时也存在这个问题。我试过“es_ES”和“pt_PT”,但结果相似。