Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#51 Re : Général » Optimisation d'une requête TSearch » 03/11/2009 17:13:18
La valeur du random_page_cost est celle définie par défaut (4.0 semblerait-il). En tous cas, je ne l'ai pas modifiée (la ligne est en commentaire dans le postgresql.conf)
En ce qui concerne les statistiques de la colonne id_ir_instrument, j'ai les valeurs suivantes (récupérées dans pgAdmin); je les donne mais je n'y comprends pas grand chose :-)
Division par zéro: 0
Largeur moyenne: 4
Valeurs distinctes: 106
Corrélations -0.499622
#52 Re : Général » Optimisation d'une requête TSearch » 03/11/2009 15:48:55
C'est pas gentil de se moquer ;-)
Pour ceux qui, comme moi, n'osent pas toucher à un système en production, je me suis donc jeté à l'eau.
Mon SGBD est sur une distribution CentOS (un RedHat like). J'y ai installé un RPM mettant la liste des sources yum à jour (rpm -ivh pgdg-centos-8.3-6.noarch.rpm), puis j'ai juste fait un "yum update postgresql". Le système a automatiquement chargé les nouveaux binaires, résolu les dépendances, et redémarré PostgreSQL. Je n'ai même pas réussi à mesurer le temps d'indisponibilité (marginal dans mon cas). Et tout marche!!!
PS: En ce qui concerne la requête soumise en début de ce thread, le gain d'exécution est négligeable. Mais je ne regrette pas pour autant d'avoir effectué cette opération.
Encore merci pour tout,
Jérôme
#53 Re : Général » Optimisation d'une requête TSearch » 02/11/2009 13:22:59
Merci pour votre réponse.
J'ai déjà un index sur id_ir_instrument, mais il n'est visiblement pas utilisé.
Quant à mettre à jour PostgreSQL, je le ferai sans doute, mais plutôt pour basculer en 8.4. Il faut cependant qu'au préalable je mette en place ma réplication pour pouvoir effectuer cette opération en limitant l'interruption de service.
#54 Général » Optimisation d'une requête TSearch » 02/11/2009 11:41:00
- jhashe
- Réponses : 7
Bonjour,
Je vous sollicite beaucoup en ce moment, mais, en attendant d'avoir mis en place une solution de répartition de charge, je cherche à optimiser les requêtes les plus coûteuses de mon code actuel. La plupart sont généres par du code,d 'où leur aspect "systématique". J'ai bien avancé, avec parfois des évolutions spectaculaires. Il m'en reste cependant une, basée sur T-search, dont la durée d'exécution reste importante. Voici la requête:
SELECT ir_instrument_ead_noeud.id_ir_instrument, ir_instrument_ead_noeud.ir_inst_noeud_p_parent, ts_rank_cd(ir_inst_noeud_libelle_valeur_vecteur,r) AS score, ir_inst_noeud_valeur_brut FROM ir_instrument_ead_noeud, to_tsquery('etat & civil') AS r WHERE ir_instrument_ead_noeud.id_ir_instrument IN (1500,1499,610,606,582,605,587,586,589,590,579,580,608,588,585,591,607,581) AND ir_inst_noeud_libelle_valeur_vecteur @@ r
Un explain donne le résultat suivant:
"Nested Loop (cost=290.22..11652.27 rows=765 width=155)"
" -> Function Scan on to_tsquery r (cost=0.00..0.01 rows=1 width=32)"
" -> Bitmap Heap Scan on ir_instrument_ead_noeud (cost=290.22..11611.75 rows=3088 width=123)"
" Recheck Cond: (ir_instrument_ead_noeud.ir_inst_noeud_libelle_valeur_vecteur @@ r.r)"
" Filter: (ir_instrument_ead_noeud.id_ir_instrument = ANY ('{1500,1499,610,606,582,605,587,586,589,590,579,580,608,588,585,591,607,581}'::integer[]))"
" -> Bitmap Index Scan on idx_lib_val_vecteur (cost=0.00..290.02 rows=3088 width=0)"
" Index Cond: (ir_instrument_ead_noeud.ir_inst_noeud_libelle_valeur_vecteur @@ r.r)"
Ce que je comprends, c'est que PostgreSQL utilise l'index placé sur ir_inst_noeud_libelle_valeur_vecteur, ce qui est logique car c'est la partie la plus lourde de la requête. Néanmoins, je pensais pouvoir l'optimiser en créant un nouvel index portant sur les colonnes id_ir_instrument (integer) et ir_inst_noeud_valeur_vecteur (tsvector), ce qui aurait énormément limité la liste des enregistrements à parcourir. Malheureusement cela semble impossible. PostgreSQL me retourne en effet systématiquement le message suivant:
ERREUR: la ligne index requiert 11312 octets, la taille maximum est 8191
État SQL :54000
Avez-vous une piste à me conseiller ?
Par avance, merci
PS: Je suis toujours en PostgreSQL 8.3.1
#55 Réplication » Réplication de bases avec Slony et Slony-ctl » 29/10/2009 12:07:16
- jhashe
- Réponses : 3
Bonjour,
Comme j'ai déjà eu l'occasion de l'évoquer dans un autre thread, nous utilisons activement PostgreSQL dans le cadre de services Web à fort traffic. Nous observons chaque jour plusieurs milliers de connexions (environ 6000 simultanément) , et nous utilisons de plus en plus de fonctions "avancées" de PostgreSQL, sur des bases de plus en plus volumineuses. Je réfléchis donc depuis un certain temps à des solutions de répartition de charge. Si, de surcroît, on peut y intégrer des solutions de haute disponibilité, ce serait la cerise sur le gâteau, mais ce n'est pas l'objectif premier, la disponibilité actuelle de notre serveur PostgreSQL étant déjà plus que satisfaisante.
Après plusieurs réflexions et échanges sur ce forum, voici l'état actuel de ma réflexion. Le principe général serait de mettre en place une réplication maitre/esclaves avec des esclaves accessibles en lecture seule, les applications demandant beaucoup plus de lectures que de modifications des données. Pgpool II serait utilisé en tant que pooler et "dispatcheur" des requêtes vers les différents serveurs, via son option "Load balancing". En ce qui concerne l'aspect réplication, après moultes hésitations, je partirais vers Slony-I. En effet, ce projet semble être un des plus anciens et des plus matures. J'avais déjà effectué quelques tests et, à vrai dire, je n'en gardais pas un très bon souvenir, non pas à cause d'un éventuel manque de fiabilité, mais à cause de la relative complexité de mise en oeuvre, et surtout à cause des implications concernant les modifications ultérieures du schéma de la base répliquée.
J'ai attentivement relu l'article consacré à Slony-I dans le HS de Linux Mag sur PostgreSQL, et j'y ai découvert l'existance du projet Slony-ctl, qui semble offrir des scripts facilitant grandement la mise en oeuvre et la maintenance de l'ensemble. J'ai cependant quelques questions, que je me permets de vous soumettre.
-Peut-on faire cohabiter plusieurs versions de Slony et de PostgreSQL dans un seul système. En effet, mon idée serait de préparer un noeud esclave en PostgreSQL 8.4, mon serveur actuel étant en 8.3, puis de mettre en place une réplication du maitre 8.3 vers l'esclave 8.4. Une fois les données répliquées, je promouvrai l'esclave en tant que maitre, ce qui me permettrait alors d'arrêter le maitre 8.3, le temps de l'upgrader en 8.4. Une fois l'opération effectuée, je le configurerais en tant qu'esclave du 2ème serveur. Une fois les données mises à jour, je pourrais alors "switcher" de façon à ce que le serveur redevienne maitre. Vous l'aurez compris, l'objectif est de pouvoir migrer le serveur PostgreSQL actuel de la version 8.3 vers la version 8.4 sans interrompre le service.
-Pour faciliter les modifications ultérieures de la base, je pensais installer un deuxième "petit" pgPool en mode réplication, qui ne serait utilisé que par notre équipe de développement, lors des modifications de schémas. De la sorte les schémas de l'ensemble des serveurs seraient toujours identiques. Il ne me resterait qu'à ajouter les ressources au "set" répliqué par Slony. Le script "slony_addobj.sh" semble indiqué pour cet usage.
-Toujours en ce qui concerne les modifications de schéma (nous sommes en perpétuels développements, et il peut donc être amené à être modifié relativement souvent), si j'ai bien compris, lorsque l'on modifie une table (par exemple ajout d'une colonne), cela a pour effet d'arrêter la réplication tant que la modification n'a pas été reportée sur les noeuds esclaves. Une fois ceux-ci mis à jour, la réplication reprend automatiquement là ou elle était rendue. C'est bien cela ?
-En cas d'ajouts d'objets (tables, fonctions, schémas,...) , je viens de l'évoquer, un appel à "slony_addobj.sh" devrait suffire.
-En cas de suppression d'objets, le script "exec_dropobj.sh" semble tout-à-fait indiqué. Que se passe-t-il si on omet de l'appeler ? Slony va-t-il simplement l'ignorer (après tout, il ne risque plus d'y avoir de modification sur une table qui n'existerait plus), ou cela va-t-il geler la réplication. Je suppose en effet que le principal problème proviendrait au cas où un esclave serait promu maitre, et essayerait donc à nouveau de répliquer une table disparue sur l'autre serveur.
-Enfin, est-il aisé de supprimer une réplication et tous les éléments associés ? Suffit-t-il de supprimer le schéma créé par Slony ou il-y-a-t-il de nombreuses autres manipulations à effectuer. L'idée derrière cette question est de ne pas m'empêcher de basculer du système de réplication de Slony vers celui que ne manquera pas de proposer PostgreSQL 8.5 (vivement cette version !!!)
Voila, un long message et de nombreuses questions. Par avance, merci de l'attention qui vous pourrez y porter.
Cordialement,
Jérôme
PS: L'article sur Slony du HS de LinuxMag précisait qu'à l'heure où il avait été écrit, Slony n'était pas encore compatible avec PostgreSQL 8.4. A priori, la version 1.2.16 apporte cette compatibilité, d'où mes interrogations sur la possibilité de l'utiliser pour upgrader mes serveurs sans interruption de service.
#56 Re : Réplication » Réplication de deux bases distantes » 28/10/2009 15:33:04
Il semblerait que, décidément, mes exemples sont tous mauvais. Je ne connais du "RAC" d'Oracle que la brochure commerciale et je ne souhaite pas que PostgreSQL copie telle ou telle base, mais qu'il s'améliore encore et encore. N'est-il de toutes façons pas déjà le meilleur SGBD ;-) ?
Honnêtement, je ne plains absolument pas de la disponibilité de PostgreSQL, même en version "mono-serveur". En 7 ans, sur un système gérant plusieurs millions de requêtes par jour, je n'ai eu qu'un seul plantage, qui était dû à un défaut sur une carte mère. Difficile de faire mieux en terme de disponibilité !
Néanmoins, j'aimerais pouvoir "facilement" basculer sur un 2ème serveur, le temps par exemple d'upgrader mon serveur principal en 8.4, sans pour autant interrompre le service. En effet, si l'installation des binaires est relativement rapide, remonter un dump demande beaucoup de temps (je n'ai pas testé en 8.4 qui, d'après ce que j'ai compris, améliore ces performances en parallélisant les requêtes, mais jusqu'ici, cette opération nécessitait plusieurs heures).
En fait, ma principale réflexion concerne la répartition de charge. Non pas que les performances de PostgreSQL soient mauvaises, loin de là, mais ses nouvelles fonctionnalités, notamment T-search, m'ont ouvert la voie à de nombreux développements complémentaires. Là où j'utilisais autrefois PostgreSQL comme un simple entrepôt de données, il devient aujourd'hui une "brique" offrant des services de plus en plus riches. Or, dans ce cas, la montée en charge commence à devenir problématique. J'ai par exemple une table sur laquelle je fais des recherches T-search. Elle contient environ 4 millions de lignes et, bien que le 'tsvector' y soit renseigné et indexé, une recherche dure quelques secondes. Ce n'est pas un problème quand un utilisateur lance une requête, mais ça le devient quand j'en ai 5000 simultanés. Je cherche donc un moyen de répartir la charge (je peux rajouter plusieurs serveurs si nécessaires), sans pour autant trop me compliquer la vie, sachant que les développements s'intensifient, et que, par conséquence, les évolutions du schéma sont relativement fréquentes.
Voilà, vous savez tout sur mes besoins actuels; ceci éclairera peut-être sous un angle différent mes précédents posts.
En tout cas, merci pour votre attention et vos précieux conseils.
Jérôme
#57 Re : Réplication » Réplication de deux bases distantes » 28/10/2009 11:01:32
Je pensais effectivement à MySQL, mais le but n'était pas de polémiquer. Je pense que si les lecteurs de ce forum pensaient que MySQL était meilleur que PostgreSQL, ils seraient plutôt sur un forum dédié à ce SBGD...
Non, par contre, je continue à penser qu'un système de "cluster" au sens où on l'entend traditionnellement (plusieurs machines physiques participant à un seul système logique) reste plus souple pour l'usager que des systèmes de réplications tiers, donc moins intégrés.
Je vais changer d'exemple, afin de ne pas être accusé de troll, mais c'est aussi ce que propose par exemple Oracle avec RAC.
Quelque part, un système de réplication maitre/maitre offre fonctionnellement une approche assez voisine à celle d'un cluster, avec potentiellement certains avantages supplémentaires (possibilité de déconnexion temporaire d'un noeud,...). C'est pourquoi, me semble-t-il, nous sommes plusieurs à nous intéresser à ce sujet.
En ce qui concerne la réplication maitre/esclaves, sur beaucoup d'applications qui réalisent plus de lectures que de modifications, c'est là encore une réponse qui peut être satisfaisante, à condition que les esclaves soient accessibles en lecture. D'ailleurs, je pense que si la "core-team" PostgreSQL cherche à améliorer son actuelle réplication par log-shipping, c'est probablement que leur point de vue n'est pas si éloigné que ça du mien ;-)
Par contre, ce que je regrette dans les systèmes de réplication maitre/esclave, c'est que s'il est généralement assez simple de promouvoir un esclave en tant que nouveau maitre (par exemple en cas de nécessité d'arrêt du maitre pour maintenance), resynchroniser a postériori un serveur pour le "re-promouvoir" maitre n'est pas toujours chose aisée.
J'avais fait des essais avec Slony il y a déjà longtemps. Les choses ont sans doute évolué, et mes moyens sont sans doute limités, mais c'est bien l'impression que cela m'avait laissé: réplication relativement simple à mettre en oeuvre, fail-over quasi-automatique, mais une base difficile à faire ensuite évoluer (nécessité de manuellement modifier le schéma sur tous les noeuds, modifier systématiquement les règles de Slony pour prendre en compte les modifs,...) et une gestion lourde pour re-promouvoir un noeud en tant que maitre après un fail-over.
Enfin, une question un peu naïve. Les systèmes de réplication ont basiquement (c'est très réducteur, je sais !) pour mission de "rejouer" les modifications apportées à une base vers une ou plusieurs autre(s) base(s). Or, sous PostgreSQL, la description de la base est elle-même accessible via le schéma spécifique information_schema (c'est, je trouve, un atout pour PostgreSQL). Pourquoi ne peut-t-on pas mettre les systèmes actuels de réplication à l'écoute de ce schéma particulier ?
En espérant avoir éteint l'incendie que je ne voulais pas allumer,
Cordialement,
Jérôme
#58 Re : Réplication » Réplication de deux bases distantes » 27/10/2009 11:59:37
Je vois que je ne suis pas le seul à m'intéresser à ces problèmes de réplication.
Je m'associe à Zied en trouvant que les outils de réplication sous PostgreSQL restent relativement mal intégrés (configuration "lourde", maintenance rendue pénible à cause de la non synchronisation des schémas,...) et, de mon point de vue, "risquées".
Ce que j'entends par là, c'est qu'on peut mettre en place une réplication qui va fonctionner de façon fiable et performante à un instant t, mais qui pourra être "cassée" par inadvertance, parce que quelqu'un aura modifié un schéma sans penser à
1) modifier les esclaves et
2) ajouter/modifier la règle de synchronisation.
De ce point de vue, il faut bien reconnaitre que "l'autre base libre" a une approche mieux intégrée de point de vue de l'utilisateur.
#59 Re : Réplication » Bucardo - Réplication Maitre-Maitre et modifications de schéma » 23/10/2009 18:13:14
check_postgres permet d'en savoir beaucoup plus. Il dispose d'une action qui compare les schémas des deux bases et indique les différences pour tous les objets
Merci beaucoup !
Je ne connaissais pas cet outil. Dommage qu'il ne réalise pas lui-même les opérations nécessaires sur les esclaves pour resynchroniser les schémas. Cela devrait cependant m'être d'une aide précieuse.
Encore merci !
#60 Re : Réplication » Bucardo - Réplication Maitre-Maitre et modifications de schéma » 23/10/2009 15:58:27
Mais en effet, sa détection automatique des ajouts de table est intéressant. Cependant, c'est assez simple à faire, même pour d'autres outils de réplication. Il suffit d'un démon qui compare les structures des deux bases, et fait la synchronisation (ceci dit, il est toujours mieux d'utiliser une fonctionnalité déjà développée).
Votre article sur Londiste m'a donné des idées à ce sujet. Vous expliquez comment recopier le schéma de la base maitre vers la base esclave (je n'ai pas l'article sous les yeux, mais je me souviens que le principe global s'appuie sur pg_dump -s). En sauvegardant le résultat dans un fichier d'une fois sur l'autre, il est facile de détecter tout changement de schéma. En cas d'ajout de tables, si ma mémoire est bonne, on peut rappeler la commande de réplication pour toutes les tables. Dans ce cas, si j'ai bien compris, l'outil va ignorer cette requête pour les tables déjà répliquées. Le tour est donc joué, simplement !
Mais, bien entendu, un changement de schéma ne se résume pas à un ajout de tables. Et pour tous les autres cas, je n'ai pas vraiment d'idées.
#61 Re : Réplication » Bucardo - Réplication Maitre-Maitre et modifications de schéma » 23/10/2009 11:18:26
Bonjour,
Merci beaucoup pour votre réponse. Je constate en effet le développement rapide de Bucardo. Par exemple, dans vos news du 18/10, vous citez la mise à disposition de la version 4.3 de cet outil, mais, quand on suit le lien, le site parle de la version 4.4.
Je poursuis donc ma réflexion en m'orientant désormais vers une réplication maitre/esclaves qui permet effectivement une plus grande scalabilité (plusieurs esclaves). Dans votre excellente série d'articles parue dans le HS de Linux Mag, vous en évoquez plusieurs. Par contre, vous ne parlez pas de Rubyrep. Cette solution, évoquée dans le wiki PostgreSQL (http://wiki.postgresql.org/wiki/Replica … on_Pooling) semble particulièrement facile à mettre en oeuvre et il y est indiqué qu'elle peut automatiquement prendre en compte les tables nouvellement crées. Si tel est réellement le cas, cela me semble un avantage certain. En effet, devoir manuellement effectuer les changement de schéma sur l'ensemble des serveurs présente une faiblesse de la plupart des outils existants; il est en effet "facile" d'omettre une modification, ce qui aura pour conséquence évidente la non total réplication des données.
Quelqu'un aurait-il des retours sur la solution rubyrep ?
#62 Réplication » Bucardo - Réplication Maitre-Maitre et modifications de schéma » 22/10/2009 18:46:01
- jhashe
- Réponses : 7
Bonjour,
Nous utilisons avec bonheur PostgreSQL dans un environnement WEB depuis 7 ans.
Nos applications et le volume de données hébergé a fortement augmenté depuis le début. Aujourd'hui, nous gérons environ 20 millions de requêtes WEB par jour (mais pas autant de requêtes SQL bien sûr).
Nous utilisons notamment de plus en plus le moteur Tsearch, mais les performances de notre infrastructure (une ferme de serveurs WEB, mais un seul serveur PostgreSQL) commencent à s'en ressentir. J'aimerais donc répartir la charge sur plusieurs serveurs (modifications -nombreuses- et lectures).
Je m'intéresse pour cela à Bucardo qui semble assez simple à mettre en place, avec des contraintes assez faibles, et qui semble répondre à nos besoins. Je me pose cependant une question à laquelle je n'ai pas trouvé de réponses sur Internet: une fois la réplication configurée et active, comment se passent les modifications de schéma (ajout/modification de tables, de vues, d'index...). Peut-on les répliquer automatiquement, ou doit-t-on les appliquer manuellement sur les 2 instances.
J'ajoute une autre question. Lorsqu'une instance s'arrête (par exemple pour une maintenance serveur), la synchronisation peut-elle ensuite reprendre automatiquement (ie la mise à jour des données du serveur "vivant" vers l'autre)
Par avance, merci pour vos points de vue
Jérôme
#63 Re : Général » Tsearch et langue française » 13/10/2009 09:38:57
Je chipote, mais le like ne résout pas tout. Si je recherche "window", le like me retournera aussi windows, à moins de bricoler pour faire une recherche du mot non précédé de lettres, et non suivi de lettres (cela peut être <rien>, un espace, un point, une virgule, un trait d'union,...). Bref, l'éventail des possibilités est large, et il est difficile d'être exhaustif.
Mais bon, si cette fonctionnalité sera rajoutée en 8.5, c'est, je suppose, que je ne suis pas le seul à considérer que son absence peut être gênante.
Il me semble que la contrib unaccent, un temps annoncé pour la version 8.4, devrait également accompagner la sortie de la 8.5.
Par rapport à l'utilisation que je fais de Tsearch, il semblerait donc que la 8.5 comblera les quelques lacunes actuelles. Ca va vraiment devenir le moteur de recherche ultime :-))
Vivement la 8.5 (ça va être dur d'être patient)
#64 Re : Général » Tsearch et langue française » 12/10/2009 17:24:54
Je connaissais ce post sur unaccent; nous en avions parlé dans un précédent thread ;-)
Quant à l'astuce qui consiste à créer l'index sur une version sans accent du texte, c'est ce que je fais actuellement.
Dans la réalité, pour des pages assez lourdes, le post-traitement nécessaire pour obtenir un affichage avec accents est cependant inutilement lourd (il peut y avoir plusieurs occurrences du terme recherché...)
Enfin, en ce qui concerne l'astuce pour gérer les traits d'union, je regrette parfois que l'approche -par ailleurs puissantissime de PostgreSQL- occulte quelques cas pourtant bien pratiques; par exemple:
-la recherche d'une expression, habituellement associée aux guillemets, n'existe pas (à ma connaissance du moins). Si l'on reprend l'astuce utilisée pour faire ressortir Saint-Pierre, on risque aussi de faire ressortir Saint-Marc, Saint-Paul,... D'une manière générale, je n'ai pas trouvé comment faire une recherche exacte. Un exemple; sur docs.postgresql.fr, si je recherche "postgresql version 8.4", je retrouve entre autres "versions de PostgreSQL™ antérieures à la 8.4". Un moteur de recherche reconnaissant les guillemets n'échouerait pas sur ce point
-la recherche étendue est une des forces de Tsearch, mais elle génère parfois un bruit inutile. Il serait confortable que l'on puisse là aussi forcer une recherche exacte. Par exemple, sur docs.postgresql.fr, si je recherche window (afin d'explorer les nouveautés de la version 8.4, bien sûr), il est dommage de trouver parmi les réponses des articles traitant de Windows.
Il se trouve que la plupart de mes besoins traitent de lieux. Tant que le nom du lieu tient en un mot, cela ne pose pas de problèmes, mais dès que l'on a des noms de lieux composés (tous les Saint-XXX, mais aussi les noms avec sur-sous-le-la-... posent beaucoup de problèmes. La plupart des moteurs de recherche (moteurs Web, Google, Bing,... où intégrés à des produits divers), permettent facilement de contourner ce problème, et de trouver les documents souhaités. Je suis frappé par les innovations réelles et pertinentes qu'apporte PostgreSQL à ce niveau (recherche par racine de mot, dictionnaires de synonymes, thésaurus,...) et, dans le même temps, par le fait qu'il n'apporte pas de réponse à certains critères qui me semblent pourtant assez basiques.
#65 Re : Général » Tsearch et langue française » 12/10/2009 09:58:41
Bonjour,
Je l'utilise aussi et suis globalement très satisfait de ses résultats. Je rencontre néanmoins 2 problèmes:
-la sensibilité "obligatoire" aux accents (problème que l'on retrouve sur docs.postgresql.fr; par exemple, une recherche sur precharger échoue, alors qu'elle aboutit avec précharger)
-la gestion des traits d'union. Il semblerait que T-search ne fonctionne que sur les lettres. En plus, si ma mémoire est bonne, le - est l'opérateur utilisé pour le "sauf". Mais là, docs.postgresql.fr semble avoir trouvé la parade (essai sur "Saint-Pierre" qui fonctionne correctement). Si quelqu'un a une info. sur la façon dont ce cas a été géré, je suis preneur ;-)
Cordialement,
#66 Re : Général » Sous requêtes à faire pour chaque enregistrement d'une 1ère requête » 24/09/2009 17:46:08
Merci !
Je suis un peu honteux, j'aurai quand-même pu trouver ces liens sans trop d'effort...
Ceci dit, si c'est une notion particulièrement puissante, ce n'est pas si trivial que ça à mettre en œuvre.
#67 Re : Général » Sous requêtes à faire pour chaque enregistrement d'une 1ère requête » 24/09/2009 15:02:20
Bonjour,
J'ai lu l'article qui parle des fonctions Window dans le dernier HS de Linux Magazine (bravo à l'illustre auteur de ce numéro ;-) ), mais le concept n'est vraiment pas clair pour moi. Avez-vous des lectures à me suggérer pour m'aider à digérer ce nouveau concept ?
#68 Re : Général » Recherche plein texte et accents » 04/06/2009 11:58:03
Oui, pas de problème à ce niveau là.
D'ailleurs, s'il ne la trouve pas (j'ai fait différents essais), on n'obtient pas le même comportement. En effet, dans ce cas là, on a un erreur dès qu'on essaye de créer la fonction. je n'ai plus le message précis en tête, mais il est du style "unable to load libunac.so"
#69 Re : Général » Recherche plein texte et accents » 03/06/2009 16:02:26
Justement, je n'en ai fait aucune, si ce n'est appliquer le patch, comme suggéré dans un précédent message, pour que la librairie compile.
A priori, je pense que libunacc ne pose pas de problème. En effet, l'exécutable généré (unaccent) semble fonctionner correctement.
Quelques exemples:
unaccent ISO-8859-1 Jérôme => Jerome
unaccent ISO-8859-1 èàçêî => eacei
sachant que l'exécutable utilise bien la librairie précédemment créée:
which unaccent
/usr/local/bin/unaccent
ldd /usr/local/bin/unaccent libunac.so.1 => /usr/local/lib/libunac.so.1 (0x00002aaaaaaad000)
libc.so.6 => /lib64/libc.so.6 (0x0000003f27400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003f27000000)
En d'autres termes, je soupçonnerai plutôt pgunacc, qui compilait pourtant sans problème ?!
Quant à analyser le core dump, c'est au desuus de mes compétences...
#70 Re : Général » Recherche plein texte et accents » 03/06/2009 11:34:46
Bonjour,
Et merci d'avoir pris le temps de s'intéresser à ma demande.
L'erreur apparaissant dans /var/log/message est la suivante:
kernel: postmaster[8680]: segfault at 0000000000000000 rip 00002aaaab3ffd80 rsp 00007fff1a823048 error 4
PS: c'était moi, l'interlocuteur qui évoquait le sujet à Solutions Linux
#71 Re : Général » Recherche plein texte et accents » 29/05/2009 16:20:43
J'ai finalement créé une fonction unaccent en SQL "pur", comme ceci:
CREATE OR REPLACE FUNCTION unaccent(character varying)
RETURNS character varying AS
$BODY$SELECT to_ascii($1,'latin1') AS result$BODY$
LANGUAGE 'sql' IMMUTABLE
COST 100;
Il y a sans doute quelques failles, mais le résultat me semble actuellement satisfaisant (sauf pour les caratères du genre oe collé...)
Savez-vous comment je pourrais créer un nouveau dictionnaire à partir du dictionnaire français (french_stem) en appliquant cette fonction ?
En effet, si je trouve la solution, je pourrai ensuite reprendre la méthode décrite par Guillaume Lelarge (voir lien dans le 1er message de ce thread)
#72 Re : Général » Recherche plein texte et accents » 29/05/2009 10:46:41
Grâce au message de Marc Cousin, j'ai réussi à compiler l'ensemble sans erreur.
Malheureusement, j'ai malgré tout toujours un segfault :-((
Merci quand-même pour votre aide.
#73 Re : Général » Recherche plein texte et accents » 29/05/2009 08:52:44
Merci beaucoup !
J'essayerai et, si ça marche, je les mettrai en download.
#74 Re : Général » Recherche plein texte et accents » 28/05/2009 18:58:37
Merci pour ta réponse, mais cela me gêne un peu. En effet, le problème ne vient pas a priori de PostgreSQL lui-même, mais plutôt de la compilation des 2 librairies tierces. D'ailleurs, ça ne pose visiblement pas de problème sous Debian, qui propose déjà libunac1 dans ses dépôts.
#75 Général » Recherche plein texte et accents » 26/05/2009 15:32:16
- jhashe
- Réponses : 14
Bonjour,
Je souhaiterai pouvoir lancer des recherches plein texte insensibles aux accents (ce n'est pas le cas par défaut sous PostgreSQL).
Grâce à l'excellent blog de Guillaume Lelarge, j'ai une possible solution:
http://blog.guillaume.lelarge.info/inde … es-accents
Malheureusement, mon serveur est sous CentOS 5 (clône de RedHat 5) en x64, et la librairie utilisée (libunac1) semble ne pas avoir été portée sur cet OS. J'ai donc téléchargé les sources pour la compiler et... j'ai obtenu plusieurs erreurs (le code semble ancien et incompatible avec gcc4 utilisé sous RH5). J'ai modifié les sources jusqu'à ce que la librairie compile.
Je me suis ensuite attelé à la compilation du module lui-même... qui m'a posé les mêmes difficulés (messages d'erreurs à la compilation). Là encore, j'ai modifié les sources jusqu'à ce que ça compile.
J'allais crier victoire quand, dans PostgreSQL, j'ai pu créer les fonctions (via \i /opt/postgresql-8.3/share/contrib/unaccent.sql) sauf que... j'ai eu le droit à un joli segfault. J'ai même eu peur de ne pas réussir à relancer mon PostgreSQL qui me refaisait un segfault à chaque redémarrage :-(
Si une âme charitable connaissait un moyen d'obtenir ou de correctement compiler libunac et le module postgresql-unaccent, je lui serais TRES reconnaissant.
Par avance, merci pour votre aide,
Jérôme