Vous n'êtes pas identifié(e).
Pages : 1
bonjour,
lors d'une migration de base entre deux serveur dump/restore (serveur1-> serveur2) j'ai rencontré le problème suivant avec la contrib tsearch: sachant que tout les GRANTont été accordés sur les tables pg_ts*, et le serveur à été redémarré. Est-ce un problème du à la différence des locales, si oui y'a t'il un moyen de les forcer?
serveur 1:
[root@serveur1 readonly]# uname -a
Linux serveur1 2.6.18-8.1.10.el5 #1 SMP Thu Aug 30 20:43:28 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
[root@serveur1 readonly]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
version postgreSql(8.1.15)
base=# select * from pg_ts_cfg;
ts_name | prs_name | locale
-----------------+----------+--------------
default_russian | default | ru_RU.KOI8-R
simple | default |
default | default | en_US.UTF-8
(3 rows)
base=# SELECT to_tsvector('TEST TS SEARCH');
to_tsvector
----------------------------
'ts':2 'test':1 'search':3
(1 row)
serveur 2:
-bash-3.1$ uname -a
Linux serveur2 2.6.18-8.1.10.el5 #1 SMP Thu Aug 30 20:43:28 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
-bash-3.1$ locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
version postgreSql(8.1.15)
base=# select * from pg_ts_cfg;
ts_name | prs_name | locale
-----------------+----------+--------------
default_russian | default | ru_RU.KOI8-R
simple | default |
default | default | en_US.UTF-8
(3 lignes)
Merci
base=# SELECT to_tsvector('TEST TS SEARCH');
ERROR: could not find tsearch config by locale
Hors ligne
oups!!
je rajoute
serveur1:
base=# SHOW lc_collate;
lc_collate
-------------
en_US.UTF-8
(1 row)
serveur2
base=# SHOW lc_collate;
lc_collate
------------
fr_FR
(1 ligne)
Dernière modification par gngassam (22/07/2010 11:07:18)
Hors ligne
Il n'arrive vraisemblablement pas à trouver de dictionnaire pour la locale. Le mieux, ça doit être de faire un select "set_curcfg('default')", cela devrait lui permettre d'utiliser la configuration default. Sinon, il est aussi possible de passer le nom de la configuration en premier paramètre de to_tsvector.
Marc.
Hors ligne
Merci marc,
en faisant le select "set_curcfg('default')", ca fonctionne effectivement à partir de la console. Mais cepandant, la migration doit être invisible pour les applis, y'a t'il un moyen de le rendre effectif pour toute les sessions, sans toucher au code des applis?
Dernière modification par gngassam (22/07/2010 12:34:24)
Hors ligne
À mon avis, le plus simple est de rajouter une configuration dans pg_ts_cfg, qui corresponde à ta locale.
Une ligne qui contiendrait par exemple fr, default, fr_FR.UTF-8
Mais vérifie après que to_tsvector fait bien ce que tu souhaites. C'est un peu vieux dans mon souvenir, le tsearch2 en contrib comme ça
Marc.
Hors ligne
Merci marc,
cependant je l'avais déjà fait, c'est la le soucis:
base=# select * from pg_ts_cfg;
ts_name | prs_name | locale
-----------------+----------+--------------
default_russian | default | ru_RU.KOI8-R
simple | default |
default | default | en_US.UTF-8
la locale en_US.UTF-8 est bien celle que je souhaite, je l'ai obtenu en mettant à jour la table pg_ts_cfg (ie: update pg_ts_cfg set locale = 'en_US.UTF-8' where ts_name = 'default').
quant à to_tsvector il fait ce que je veux en faisant le select "set_curcfg('default')" avant, sinon "ERROR: could not find tsearch config by locale".
Hors ligne
Alors, il faut que ta base soit dans cette locale aussi. C'est la locale que tsearch2 utilise pour déterminer uqel dictionnaire utiliser par défaut. Mais en 8.1, ça veut dire recréer le cluster je pense.
Marc.
Hors ligne
C'est ce que je pensai aussi, mais j'espérai que ce soit plus simple que ça, vu que je suis en prod.
Merci, marc
Hors ligne
Non, on ne peut pas convertir le locale d'une base.
Marc.
Hors ligne
Pages : 1