logi sisse meist KKK

Tere,

üldiselt on mul kogemusi erinevate andmebaasidega Postgre jäi viimaseks ja mõneti üllatas mind ning mitte meeldivalt.

Sisuliselt on Windows Server, kus peal töötab Postgre 8.4 ja op. süsteemi regiooniseaded on US English. Andmebaas on ise seal UTF8 formaadis.

Postgre puudub täielikult võimalus sorteerimisele öelda collationid ette.

select customer from customers order by name collate estonian

Kui lihtsalt panna order by name, siis täpitähtedega kirjed täiesti valesti sorteeritud, kuna selgub, et Postgre kasutab "collationina" süsteemiseadeid ehk siis Windows Serveri US English.

Ma ei söenda ka seal serveril muuta regiooniseadeid, kuna seal palju spetsiifilisi serviceid töös.

On võimalik, et teen external dll', mis collationeid tunneks, aga see pole küll normaalne lahendus suht lihtsale probleemile.

Tänan, Ingmar Tammeväli

küsitud Nov 23 '09 at 17:40

Ingmar%20Tammev%C3%A4li's gravatar image

Ingmar Tammeväli
61246

edited Nov 25 '09 at 08:07

Tambet%20Matiisen's gravatar image

Tambet Matiisen ♦♦
77791125

Suurepärane näide küsimusest, mida on mõtet küsida Pinu.ee-st ja mitte StackOverflow.com-st.

(Nov 25 '09 at 08:06) Tambet Matiisen ♦♦

Postgre dokumentatsioon annab ilusti vastuse. :D

initdb --locale=et_EE
initdb --locale=Estonian

teine variant, kirjutad mingi custom funktsiooni collateEst, mis teeb ä -> a-ks jne..

SELECT ... ORDER BY collateEst(fld)
siis tasub ka teha indeks
CREATE INDEX test_collateEst ON table_name (collateEst(fld));

kolmas teed operaatorid <<< ja >>>, mis järjestavad eesti keele järgi

SELECT ... ORDER BY fld USING <<<
CREATE INDEX fld_idx ON table USING <<<
link

vastatud Nov 23 '09 at 21:20

egon's gravatar image

egon ♦♦
771239

edited Nov 23 '09 at 22:20

Tänud, olen ka seda põhjalikult lugenud. Üldiselt ei pääse sinna masinale ligi õhtul, proovisin kodumasinal.

C:Program FilesPostgreSQL8.4bin>initdb --locale=sv_SE -D testdb initdb: invalid locale name "sv_SE" initdb: invalid locale name "sv_SE"

Paistab, et Linuxi maailmas saab ta selle info /etc/locale.gen failist või kusagilt sealt, Windowsi maailma ei tööta Postgre korrektselt, on seotud op.süsteemi default seadetega.

Tervitab, Ingmar

(Nov 23 '09 at 21:34) Ingmar Tammeväli
2

Windows kasutab teisi locale identifikaatoreid http://msdn.microsoft.com/en-us/library/ms776260(VS.85).aspx .

(Nov 23 '09 at 22:01) egon ♦♦

Tänud,

suht suure tõenäosusega lähen nö teise variandi teed. Ma kirjutasin kunagi Firebirdile sarnase external dll'i, kui seal veel collationid olid lapsekingades.

Lihtsalt natuke üllatav oli, et Postgre's satun selliste probleemide rägastikku.

(Nov 23 '09 at 22:05) Ingmar Tammeväli

initdb --locale=Estonian peaks toimima

(Nov 23 '09 at 22:21) egon ♦♦

Lisaks Egoni vastusele on võimalik alates 8.4-st sorteerimisjärjekord ja upper/lower käitumine ette anda ka andmebaasipõhiselt CREATE DATABASE käskluses. Näiteks nii:

CREATE DATABASE eesti_db ENCODING 'utf8' COLLATE 'et_EE.UTF-8' CTYPE 'et_EE.UTF-8' 
    template template0;

Uus andmebaas on vaja luua kindlasti template0 põhjal, täpsemalt dokumentatsioonis ja selles blogipostituses. Kahjuks ise proovinud pole, sitsin ikka veel 8.1 peal :).

link

vastatud Nov 24 '09 at 21:15

Tambet%20Matiisen's gravatar image

Tambet Matiisen ♦♦
77791125

Täpilised vast ikka päris suvaliselt pole, võiks olla ikka oma alustähe juures, vast?

Üks võimalus on kasutada sortimiseks lisatabeleid või -välju, kus on tehtud tähtedele nihe ja siis sama nihet kasutada ka otsingufraaside peal. Et siis midagi sellist:

tr/šzžtuvwõäöüxy/tuvwxyzzzzzzz/;

Nende zzz-dega peaks siis midagi asjalikumat välja mõtlema, vast kõige lihtsam oleks collation ette võtta ja hakata nihutama algusest ja selliste diakriitikute arvelt, mis võib ühendada (nagu n ja ǹ ja ń).

Rohkem nagu häkk, siis.

link

vastatud Nov 23 '09 at 20:19

WK's gravatar image

WK
893712

Tänud kaasamõtlemise eest !

Olen kunagi ammu sellist trikki kasutanud, probleemid paistab, et jätkub like laused tõusutundlikud Ä <> ä; isegi lihtsad võrdlused ei toimi. upper ja lower käsud ei oska meie täpikatega ka midagi teha.

Nüüd ongi mul valida , kas kirjutada täiendav external dll mis korrektselt andmed lowercase keerab ja saan seda sortimisel kasutada, küsimus vaid mis indeksid siis asjadest arvavad.

Teine variant teen tõesti mingi hacki.

Tervitab, Ingmar

(Nov 23 '09 at 21:05) Ingmar Tammeväli
Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×3
×1

küsitud: Nov 23 '09 at 17:40

nähtud: 3,721 korda

viimati uuendatud: Nov 25 '09 at 08:07

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee