PostgreSQL 9.2 rendezés

Fórumok

Sziasztok,

A téma címben nevezett adatbázis kezelő rendszerből feltelepítettem 9.2 verziót. Azóta viszont a rendezés kicsit furcsán működik. Különbséget tesz a kis- és nagybetűk között, amit a régi verzió nem tett.

Nem tud valaki egy megoldást arra, hogy a régihez hasonló módon működjön a rendezés, ahol a kis- és nagybetűk között nem tett különbséget a rendszer.

A netet böngészve sajnos csak olyan megoldásokkal találkoztam, hogy ORDER BY UPPER(mező neve), de ez a megoldás szinte szóba se jöhet, mivel nagyon sok lekérdezésről van szó, amit egyesével átírni egy bő fél napi munka.

Van valakinek valami ötlete a megoldásra?

Előre is köszönöm.

Hozzászólások

A megfelelő nyelvi beállítás meg fogja hozni a kívánt eredményt


$ export CTYPE=hu_HU.UTF8 LC_COLLATE=C
$ sort <<EOT
alfa1
Alfa2
ALFA3
EOT
ALFA3
Alfa2
alfa1
$ export CTYPE=hu_HU.UTF8 LC_COLLATE=hu_HU.UTF8
$ sort <<EOT
alfa1
Alfa2
ALFA3
EOT
alfa1
Alfa2
ALFA3

de ettől függetlenül ha következetesen van írva a kód, egy order by átszerkesztése akárhány forrásfájlban akár szkripttel, akár IDE lehetőségeivel nem tarthat fél napig -- de még következetlen kódolás esetés se igazán.

Nagyon szépen köszönöm. El fogom végezni a nyelvi beállításokat.

Valóban készíthető hozzá egy script, ami átfésülve a kódot javít mindent, de mint minden script futtatás után a tesztelés ismételten rengeteg időt venne igénybe. Ami pedig a kézi átírást illeti kellő számú és méretű portál esetén hidd el, hogy sokáig tart.

psql -c initdb --pgdata=your data dir -E 'UTF-8' --lc-collate='hu_HU.UTF-8' --lc-ctype='hu_HU.UTF-8'

vagy valami hasonló, utána visszaállítani a mentést, hátha

Na igen, ezt a részét sose szerettem a PostgreSQL-nek. Nem mintha más adatbázis kezelő rendszerek jobban csinálnák. Amiben létrehozod initdb-vel az adatkönyvtárat, azt használják az adatbázisok. Bár elméletileg megvan a lehetőség hogy create database -nek megadj encoding és collation paramétereket, de egyrészt ez nem mindig működik (pl. ha initdb ascii volt akkor latin2-re nem fog menni mert "incompatible") másrészt meg kapcsolaton belül nem lehet collation-t váltani. Ez utóbbi a legnagyobb szívfájdalmam, mert így nem lehet olyan többnyelvű programot írni, aminél a rendezés nyelvét váltani lehetne. Mivel a collation nem a lekérdezésben van hanem az adatbázisban. Bár azt már 9.1-ben megcsinálták hogy oszlopra lehessen külön collation-t megadni (create table-ben) viszont sajnos ez még mindig nem az igazi. Mert ha egyszerre több nyelven vannak benne adatok, akkor rendezni még mindig csak egy collation alapján lehet...

Nem tudok róla hogy lehetne, de éles rendszeren amúgy sem kísérleteznék.

ALTER DATABASE ???? SET LC_COLLATE to 'hu_HU.UTF-8'; szerintem nem fog menni.

CREATE DATABASE ????
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'hu_HU.UTF-8'
LC_CTYPE = 'hu_HU.UTF-8'
CONNECTION LIMIT = -1;

Aztán beletolod az adatokat és kipróbálod.