PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

[ORDER BY] comportement différent sur windows et sur linux

Technique - général | [ORDER BY] comportement différent sur windows et sur linux

Par aldo31 le 25/01/2007 - 15:14

Bonjour,

j'ai installé postgresql 8.2 sur windows et sur fedora
j'ai remarqué que l'order by ne classe pas les éléments de la meme facon sur les deux plateformes

En effet, l'order by sur windows positionne l'élément : ' [Non désigné]' en premier (car commence par un espace)
et Fedora, le positionne selon la lettre N (sans tenir compte de l'espace et du croché)

comment cela se fait-il ?

Cordialement
Aldo

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour Quelle locale util

Christophe Chauvet/ = 25 Janvier, 2007 - 17:30

Bonjour

Quelle locale utiliserz vous sous Fedora, cela Ă  une incidence sur l'ordre de tri.

Cordialement.

Christophe Chauvet
KrysKool.org


j'ai oublié de préciser que

aldo31/ = 25 Janvier, 2007 - 18:16

j'ai oublié de préciser que postgres est configuré en UTF8 sur windows et sur Fédora...

la locale de fedora est FR(latin9)
c'est bien ca que tu veux savoir ?

je ne comprends quand pas pourquoi cela peut avoir une incidence sur l'ordre de tri, puisque quelque soit la locale l'order by doit classer l'espace avec le a...

n'est ce pas ?


j'ai vraiment besoin de compr

aldo31/ = 29 Janvier, 2007 - 00:57

j'ai vraiment besoin de comprendre pour les deux order by sont différents..

il faut que mes éléments commencant par espace apparaissent en premier.
sur la plateforme windows ca marche, et pas sur linux

merci de m'aider
Aldo


peut-ĂŞtre que les colonnes s

sparky/ = 30 Janvier, 2007 - 11:46

peut-être que les colonnes sont différentes (varchar et char), quelles sont les types des colonnes ?


les deux colonnes sont de typ

aldo31/ = 30 Janvier, 2007 - 13:10

les deux colonnes sont de type varchar

par contre sur windows j'utilise la version 8.2 et sur fedora 8.1
je ne comprendrai pas que le pb vienne de la

quelque soit la version de postgres, et la plateforme, l'order by doit positionner l'espace et les caractère spéciaux en premier !!


Tu pourrais préparer un "cas

sparky/ = 30 Janvier, 2007 - 19:09

Tu pourrais préparer un "case", un script qui crée la table, la remplit et fait le select, histoire qu'on puisse le tester facilement et essayer de reproduire le problème ??


Comme je le disais l'ordre de

Christophe Chauvet/ = 30 Janvier, 2007 - 19:57

Comme je le disais l'ordre de tri dépend de la locale coté serveur, voir le 27.2.2
et Commande SQL SELECT dont voici un extrait

Les données de chaînes de caractères sont triées suivant l'ordre spécifique à la locale, ordre établi au moment de la création du groupe de bases de données.

Cordialement.

Christophe Chauvet
KrysKool.org


comment puis-je alors faire,

aldo31/ = 30 Janvier, 2007 - 20:09

comment puis-je alors faire, pour faire apparaitre l'espace en premier ?

faut-il que je change de locale ?
ou est ce paramétrable ?


tu as raison Christophe, le

aldo31/ = 8 FĂ©vrier, 2007 - 12:54

tu as raison Christophe,
le pb vient certainement de la locale

j'ai testé de démarrer postgres avec des locales différentes :
initdb --locale=fr_FR
initdb --locale=fr_FR.iso88591
initdb --locale=C
initdb --locale=iso
etc

rien Ă  faire, l'order by se comporte de la meme maniere a chaque fois
et les éléments commencant par : '[N' n'apparaissent pas en premier
mais a la position de la lettre 'N'

Peux-tu me donner plus d'indication, stp ?


sur la version 8.2, le type v

aldo31/ = 30 Janvier, 2007 - 20:04

sur la version 8.2, le type varchar n'existe plus,
(enfin, il n'est pas disponible sur pgadmin3)
alors j'ai utilisé character varying
sur fedora (version 8.0), il associe character varying a varchar

voila un exemple :

CREATE TABLE test
(
chaine character varying NOT NULL
)
WITHOUT OIDS;
ALTER TABLE test OWNER TO postgres;

INSERT INTO test(chaine, id) VALUES (' [premier]', 1);
INSERT INTO test(chaine, id) VALUES ('a', 2);
INSERT INTO test(chaine, id) VALUES ('b', 3);
INSERT INTO test(chaine, id) VALUES ('c', 4);

R = select * from test order by chaine;

en exécutant la requete R, sur windows, on obtient 1, 2, 3, 4 dans l'order

et sur fédora : 2,3,4,1


ce n'est varying(valeur) ? si

sparky/ = 31 Janvier, 2007 - 17:27

ce n'est varying(valeur) ? sinon on a un type text

"Si vous voulez stocker de longues chaînes sans limite de taille spécifique, utilisez le type text ou le type character varying sans indiquer de taille, plutôt que d'indiquer une limite de taille arbitraire.)" http://docs.postgresqlfr.org/pgsql-8.0.10-fr/datatype-character.html


je ne comprends ta question..

aldo31/ = 31 Janvier, 2007 - 20:30

je ne comprends ta question...

teste chez toi : tu crée une table test
tu crée une colonne : chaine de type varchar ou character varying

ajoute des valeurs ds la table (dont certaine commence par des espaces)
puis exécute la requete avec l'order by,

le resultat de l'order by est différent sur windows et sur linux

Chirstophe a surement raison, le pb vient de la locale, mais comment faire pour le contourner...


Apparemment, d'un côté tu a

sparky/ = 1 FĂ©vrier, 2007 - 12:01

Apparemment, d'un côté tu as une colonne varchar et de l'autre text.

Pour la locale, il faut changer LC_ALL (variable d'environnement) avant le lancement du daemon (sous Unix) pour windows, je ne sais pas


pour le type des colonnes, je

aldo31/ = 1 FĂ©vrier, 2007 - 13:03

pour le type des colonnes, je ne comprends pas bien...

en fait, j'ai créé ma bd sur windows, pour j'ai généré un backup, que j'ai restauré sur linux

de toute facon, que ce soit du text ou du varchar ou du character, l'order by doit placer l'espace en premier, n'est ce pas ?


tu as raison Christophe, le

aldo31/ = 13 FĂ©vrier, 2007 - 12:54

tu as raison Christophe,
le pb vient certainement de la locale

j'ai testé de démarrer postgres avec des locales différentes :
initdb --locale=fr_FR
initdb --locale=fr_FR.iso88591
initdb --locale=C
initdb --locale=iso
etc

rien Ă  faire, l'order by se comporte de la meme maniere a chaque fois
et les éléments commencant par : '[N' n'apparaissent pas en premier
mais a la position de la lettre 'N'

Peux-tu me donner plus d'indication, stp ?


utiliser locale ne suffit pas

Christophe Chauvet/ = 13 FĂ©vrier, 2007 - 18:08

utiliser locale ne suffit pas, il faut également mettre --lc_collate c'est cette valeur qui fixe l'ordre de tri, elle est définit une fois pour toute, et ne peut pas être changer (sinon il y'aurait un risque de corruption d'index)

Cordialement.

Christophe Chauvet
KrysKool.org


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.