PostgreSQL does not have its own sorting rules; it uses the rules provided by the operating system. If you try with /usr/bin/sort with the same locale, you will get the same sort order.
Here is the result with your sample data when trying with Ubuntu 12.04, PostgreSQL 9.1:
create COLLATION cs_CZ (locale="cs_CZ.UTF-8"); select * from (values('Ca'),('Čb'),('Cc')) as l(a) order by a collate cs_CZ;
Result:
a
----
Ca
Cc
Čb
(3 rows)
Please note that it is sorted at your discretion.
If your operating system is sorted differently, and you are sure that it is incorrect in accordance with the official Czech rules, then this is a mistake in its implementation in the Czech language.
UPDATE the following comment:
SELECT * FROM (values('A'),('Da'),('Ďb'),('Dc'),('E')) AS l(a) ORDER BY a COLLATE cs_CZ;
leads to:
a
----
A
Da
Ďb
Dc
E
source share