2015-06-30 38 views
12

Basta dare un'occhiata, per favore:PostgreSQL ordinamento con cirillico "ь"

WITH toks AS (
    SELECT tok 
    FROM 
     unnest('{ь, а, чь, ча, чль, чла}'::text[]) AS tok 
    ORDER BY tok COLLATE "uk_UA" 
) 
SELECT ROW_NUMBER() OVER() AS "#", tok FROM toks 
ORDER BY tok COLLATE "uk_UA" 

PostgreSQL 9.3 (Ubuntu) mi dà questo risultato:

# | tok 
---+----- 
1 | а 
2 | ча 
3 | чль 
4 | чла 
5 | чь 
6 | ь 
(6 rows) 

Qui le righe 1, 2, 5 e 6 sono ordinati correttamente ("ь" va dopo "а") mentre le righe 3 e 4 sono ordinate in modo errato ("а" va dopo "ü").

Tutte le lettere sono cirilliche, l'ho controllato tante volte.

prega, cosa c'è di sbagliato e come aggirare (

UPDATE:. Questo è un bug che è stato fissato in corrente principale di recente: https://sourceware.org/bugzilla/show_bug.cgi?id=17293

UPDATE2:. Si prega di notare la mia risposta qui sotto

+0

Qual è la codifica del database? Sembra che importi ... –

+0

@TagirValeev Codifica: UTF8, Collation: uk_UA.UTF-8 (entrambi come mostrato da pgadmin3). – brownian

+3

PostgreSQL utilizza l'ordine delle impostazioni internazionali dal sistema operativo. Se si utilizza l'utilità 'sort' della riga di comando con le stesse regole di confronto e gli stessi dati, questo dovrebbe produrre lo stesso ordine. –

risposta

3

Quindi, le soluzioni è stato completato in questi passaggi:

  1. cercato su internet e http://linux.org.ua/ per qualsiasi informazione; trovarono http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1407783417/6#6
  2. Preferiti al bug report: https://sourceware.org/bugzilla/show_bug.cgi?id=17293, fissa 2015-05-26
  3. Controllato glibc versione (2.19 ora)
  4. afferrato una patch; modifica la patch (rimosso la sezione per Makefile)
  5. appoggio /usr/share/i18n/locales/uk_UA fino
  6. Patchato con [cd /usr/share/i18n/;] patch --dry-run -p2 < locales_uk_UA_softsign.diff --- quindi senza --dry-run.
  7. locale-gen
  8. service postgresql restart
7

PostgreSQL si affida alle impostazioni internazionali del sistema operativo per ordinare

Vedere come Ubuntu 14.04 ordina quell'elenco:

Nei commenti si dice che è diverso, ma quello che ottengo qui è esattamente lo stesso ordine della query.

Infatti arriva prima dello чла che intuitivamente è strano ma non conosco il cirillico.

Si può guardare a /usr/share/i18n/locales/uk_UA per la definizione della locale, e portarlo su come un bug ubuntu dei pacchetti locales.

+0

Grazie, in effetti: https://sourceware.org/bugzilla/show_bug .cgi? id = 17293. Controllerò tutto – brownian