PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 02/11/2010 19:26:37

unisol
Membre

probleme encodage du cluster

Bonjour,

je viens d'installer une distribution CENTOS 5.
et installé postgresql 8.4-5.
je souhaite que mon encodage par défaut soit UTF8 avec
LC_COLLATE = 'French_France.1252'
LC_CTYPE = 'French_France.1252'

le locale par défaut de ma distrib est :
[root@s15261659 ~]# locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
etc...

si j'initialise ma base avec :
service postgresql initdb  --encoding=UTF8 --locale=fr_FR.utf8 --pgdata=/var/lib/pgsql/data

je vérifie le résultat est :

show lc_ctype;
lc_ctype
----------
C
(1 row)

comment faire ? pour avoir du UTF8

j'ai un moment changé ma variable LANG avec :
LANG = fr_FR

[root@s15261659 ~]# locale
LANG=fr_FR
LC_CTYPE="fr_FR"
LC_NUMERIC="fr_FR"
LC_TIME="fr_FR"
LC_COLLATE="fr_FR"
etc...

là je me suis la partie va être bon

que neni

donc voilà, je cherche de l'aide

merci

Dernière modification par unisol (02/11/2010 19:27:07)

Hors ligne

#2 02/11/2010 19:30:17

gleu
Administrateur

Re : probleme encodage du cluster

À ma connaissance, "service postgresql initdb" n'accepte pas d'arguments. Il faudrait vérifier dans ce script. Une autre façon de le faire serait de lancer initdb soi-même.


Guillaume.

Hors ligne

#3 02/11/2010 20:03:54

unisol
Membre

Re : probleme encodage du cluster

Si si, initdb accepte bien des arguments, dailleurs, pas d'erreur pendant l'execution

http://www.postgresql.org/docs/7.4/stat … nitdb.html

Hors ligne

#4 02/11/2010 20:43:55

Marc Cousin
Membre

Re : probleme encodage du cluster

initdb accepte des arguments.
Mais vous n'avez pas lancé 'initdb', qui est un programme
Vous avez lancé :
'service postgresql initdb  --encoding=UTF8 --locale=fr_FR.utf8 --pgdata=/var/lib/pgsql/data', qui a lancé le programme 'service', qui à son tour a lancé le script /etc/init.d/postgresql. Qui lui ne prend, à mon avis, pas d'argument. Et qui, toujours à mon avis, va ignorer vos variables d'environnement, puisqu'il fera un su - postgres dans le script, ce qui rechargera les variables.

Vous avez plutôt intérêt à positionner ces variables dans le .bash_profile ou .bashrc de l'utilisateur postgresql. Et de positionner LANG à fr_FR.utf8

Un dernier point : je doute que le collate French_France.1252 soit compatible avec de l'utf8, puisque par définition, c'est un collate pour de la codepage 1252.


Marc.

Hors ligne

#5 02/11/2010 20:44:16

gleu
Administrateur

Re : probleme encodage du cluster

initdb, oui. Seulement, quand vous faites "service postgresql initdb", vous exécutez le script de démarrage de PostgreSQL pour une Fedora, qui va lui-même lancer initdb. Rien ne me dit que le script va penser à fournir les arguments à initdb.

Ou autrement dit, pour être plus clair:

initdb "plein d'arguments"

n'est pas forcément la même chose que

service postgresql initdb "plein d'arguments"

Tout dépend de ce que le script /etc/init.d/postgresql fait du "plein d'arguments".

Et je n'ai malheureusement pas de Fedora sur moi pour vérifier.


Guillaume.

Hors ligne

#6 02/11/2010 20:51:12

unisol
Membre

Re : probleme encodage du cluster

votre analyse est fine...
question bete.
comment editer ces fichiers ?
avez vous sous la main un fragment d'exemple ?

Hors ligne

#7 02/11/2010 20:53:03

unisol
Membre

Re : probleme encodage du cluster

merci à gleu

en fait j'ai une CENTOS (un close d'une RED HAT)

Hors ligne

#8 02/11/2010 20:55:56

unisol
Membre

Re : probleme encodage du cluster

ou se trouve ces fichiers ?

Hors ligne

#9 02/11/2010 21:01:03

unisol
Membre

Re : probleme encodage du cluster

j'ai touvé
en tapant
vi /etc/bashrc
et
vi /etc/profile
on arrive à editer les fichiers
je ne vois pas ou est la variable LANG !

Hors ligne

#10 02/11/2010 21:12:01

Marc Cousin
Membre

Re : probleme encodage du cluster

Non, ces fichiers sont dans le home de l'utilisateur postgres.
Faites su - postgres

Ensuite vous aurez un fichier caché (commençant par un . ) qui s'appellera .bashrc ou .bash_profile, suivant les distributions.


Marc.

Hors ligne

#11 02/11/2010 21:12:50

Marc Cousin
Membre

Re : probleme encodage du cluster

Par ailleurs, ce n'est pas parce qu'une variable n'est pas dans un fichier que vous ne pouvez pas l'y rajouter. Une ligne
export LANG=fr_FR.utf8
suffira dans un de ces fichiers


Marc.

Hors ligne

#12 02/11/2010 21:14:05

unisol
Membre

Re : probleme encodage du cluster

NON en fait c'est une erreur
les fichiers "semblent" etre edité par :
vi ~/.bash_profile
et
vi~/.bashrc

dans les deux cas pas de trace de LANG
faut il l'ajouter ?

je crois savoir que seul l'un des deux fichier est lu au démarrage ?!

puis avoir votre assistance sur ce point ?
mon linux n'est pas tres bon.

merci

Hors ligne

#13 02/11/2010 21:16:40

Marc Cousin
Membre

Re : probleme encodage du cluster

Si vous avez les deux, il est probable que l'un des deux charge l'autre (le .bash_profile doit avoir une ligne 'source .bashrc' ou quelque chose comme ça).

Éditez le .bash_profile, je pense que ça ira très bien. Et oui, rajoutez une ligne LANG.

par ailleurs le vi ~/.bash_profile doit être fait en tant qu'utilisateur postgres.


Marc.

Hors ligne

#14 02/11/2010 21:28:51

unisol
Membre

Re : probleme encodage du cluster

une fois loggé en postgres j'ai ajouté la ligne comme ceci.
faut-il redemarrer la machine

[ -f /etc/profile ] && source /etc/profile
export LANG=fr_FR.utf8
PGDATA=/var/lib/pgsql/data
export PGDATA

un locale donne

-bash-3.2$ locale
LANG=fr_FR.utf8
LC_CTYPE="fr_FR.utf8"
LC_NUMERIC="fr_FR.utf8"
LC_TIME="fr_FR.utf8"
LC_COLLATE="fr_FR.utf8"
LC_MONETARY="fr_FR.utf8"
LC_MESSAGES="fr_FR.utf8"
LC_PAPER="fr_FR.utf8"
LC_NAME="fr_FR.utf8"
LC_ADDRESS="fr_FR.utf8"
LC_TELEPHONE="fr_FR.utf8"
LC_MEASUREMENT="fr_FR.utf8"
LC_IDENTIFICATION="fr_FR.utf8"
LC_ALL=

je prévois de revenir en tant que root
de supprimer la base avec un
rm -rf /var/lib/pgsql/data/
de réinitialiser la base avec
service postgresql initdb

êtes vous daccord ?

Hors ligne

#15 02/11/2010 21:36:34

unisol
Membre

Re : probleme encodage du cluster

avant de répondre, je sui l'idiot de la soirée.
en revenant en root,
un locale donne


[root@s15261659 ~]# locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=


PAS BON !

mais en revenant sous le user postgres
on a :

[root@s15261659 ~]# su - postgres
-bash-3.2$ locale
LANG=fr_FR.utf8
LC_CTYPE="fr_FR.utf8"
LC_NUMERIC="fr_FR.utf8"
LC_TIME="fr_FR.utf8"
LC_COLLATE="fr_FR.utf8"
LC_MONETARY="fr_FR.utf8"
LC_MESSAGES="fr_FR.utf8"
LC_PAPER="fr_FR.utf8"
LC_NAME="fr_FR.utf8"
LC_ADDRESS="fr_FR.utf8"
LC_TELEPHONE="fr_FR.utf8"
LC_MEASUREMENT="fr_FR.utf8"
LC_IDENTIFICATION="fr_FR.utf8"
LC_ALL=


je me rend compte que chaque utilisateur a sa propore table de caractère.

que faut il faire dans ce cas ?

Hors ligne

#16 02/11/2010 22:13:08

Marc Cousin
Membre

Re : probleme encodage du cluster

Normalement, rien, c'est bizarre.

Je n'ai pas de centos pour tester, là, mais si votre locale pour postgres vaut cela, supprimez le cluster et recréez le directement par la commande initdb en tant que postgres. Ça devrait marcher.


Marc.

Hors ligne

#17 02/11/2010 22:30:18

unisol
Membre

Re : probleme encodage du cluster

voilà grace à votre aide et vos lumières
voici ce que j'ai fais pour terminer : (ça peut toujours service quelqu'un)

j'ai edité sous root : .bash_profile

vi ~/.bash_profile

puis ajouté
export LANG=fr_FR.utf8

pour initialiser le script j'ai fais un :
source ~/.bash_profile

à vérifier avec :
# locale
LANG=fr_FR.utf8
LC_CTYPE="fr_FR.utf8"
LC_NUMERIC="fr_FR.utf8"
LC_TIME="fr_FR.utf8"
LC_COLLATE="fr_FR.utf8"
LC_MONETARY="fr_FR.utf8"

on construit le cluster (sous root) et pas d'arguments cette fois puis ce que la table est bien en UTF8 :
# service postgresql initdb

BINGO !!!

on vérifie :

postgres=#  show lc_ctype;
  lc_ctype 
------------
fr_FR.utf8
(1 row)

postgres=# show lc_collate;
lc_collate
------------
fr_FR.utf8
(1 row)

sous PGAdminIII la création de ma base est par défaut en UTF8

Merci à tous pour votre précieuse aide.
j'ai galéré des jours, mais c'est pas grave c'est un enseignement.

Hors ligne

#18 03/11/2010 09:52:19

Marc Cousin
Membre

Re : probleme encodage du cluster

Attention, par contre, tu n'es pas dans le collate demandé initialement : 'French_France.1252'. Je le mentionne pour être sûr que c'est bien ce que tu souhaites (tri alphabétique français, pas spécialement celui de la cp1252)


Marc.

Hors ligne

#19 03/11/2010 15:32:06

unisol
Membre

Re : probleme encodage du cluster

oui javais vu, je pense que l'UTF8 englobe tous les jeux de caractères (qui peut le plus peut le moins)
j'avoue pour le moment ne pas en connaitre TOUTES les conséquences.

voici la def de la base source : (

CREATE DATABASE gmao
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'French_France.1252'
       LC_CTYPE = 'French_France.1252'
       CONNECTION LIMIT = -1;

merci de la remarque.

question : connaissez vous un outil permettant la syncho des serveurs au niveau de leur structure ?
(dois je ouvrir une discussion à ce sujet ?)

Hors ligne

#20 03/11/2010 17:23:54

Marc Cousin
Membre

Re : probleme encodage du cluster

la structure de quoi ?


Marc.

Hors ligne

#21 03/11/2010 18:26:35

gleu
Administrateur

Re : probleme encodage du cluster

Comme ça n'a rien à voir avec la discussion en cours, oui, ce serait mieux d'ouvrir une autre discussion.


Guillaume.

Hors ligne

#22 03/11/2010 20:08:58

unisol
Membre

Re : probleme encodage du cluster

je vais ouvrir une discution,

ps >>> marc :
scructure des bases de données sur différents serveurs. afin qu'elle soient à l'identiques.
@+ sur un autre fil

Hors ligne

Pied de page des forums