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

#1 22/07/2010 11:00:50

gngassam
Membre

probleme tsearch

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

#2 22/07/2010 11:06:43

gngassam
Membre

Re : probleme tsearch

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

#3 22/07/2010 11:57:17

Marc Cousin
Membre

Re : probleme tsearch

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

#4 22/07/2010 12:26:01

gngassam
Membre

Re : probleme tsearch

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

#5 22/07/2010 13:54:16

Marc Cousin
Membre

Re : probleme tsearch

À 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 smile


Marc.

Hors ligne

#6 23/07/2010 09:38:47

gngassam
Membre

Re : probleme tsearch

Merci marc,

cependant je l'avais déjà fait, c'est la le soucis:

gngassam a écrit :

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

#7 23/07/2010 09:55:01

Marc Cousin
Membre

Re : probleme tsearch

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

#8 23/07/2010 10:21:58

gngassam
Membre

Re : probleme tsearch

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

#9 23/07/2010 10:26:01

Marc Cousin
Membre

Re : probleme tsearch

Non, on ne peut pas convertir le locale d'une base.


Marc.

Hors ligne

Pied de page des forums