Vous n'êtes pas identifié(e).
Pages : 1
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
À 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
Si si, initdb accepte bien des arguments, dailleurs, pas d'erreur pendant l'execution
Hors ligne
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
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
votre analyse est fine...
question bete.
comment editer ces fichiers ?
avez vous sous la main un fragment d'exemple ?
Hors ligne
merci à gleu
en fait j'ai une CENTOS (un close d'une RED HAT)
Hors ligne
Hors ligne
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
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
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
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
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
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
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
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
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
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
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
la structure de quoi ?
Marc.
Hors ligne
Comme ça n'a rien à voir avec la discussion en cours, oui, ce serait mieux d'ouvrir une autre discussion.
Guillaume.
Hors ligne
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
Pages : 1