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

#1 05/04/2018 17:33:16

duple
Membre

Erreur sur pg_trgm

Bonjour,

Nous travaillons sur postgresql 9.4 dans un environnement linux debian. Le problème ne survient que maintenant, en fait des requêtes habituelles tournées sur base sans aucun problème, quand soudainement au début d'après midi aujourd'hui la même requête retourne un message d'erreur avec :
"could not find function "gin_trgm_triconsistent" in file "/usr/lib/postgresql/9.4/lib/pg_trgm.so" Where: SQL statement "UPDATE numenvault.Object_Folder SET name = p_name, description = p_description, properties = p_properties, allowed_child_object_type_ids = p_allowed_child_object_type_ids, last_modified_by = p_user, last_modification_date = v_change_timestamp, change_token = v_change_token WHERE id = p_id_folder" PL/pgSQL function numenvault.update_folder(bigint,numenvault.path_segment,text,hstore,character varying[],character varying,hstore) line 56 at SQL statement".

Auparavant, il n'y avait pas eu cette erreur.

De quoi s'agit il exactement, pouvez vous aider svp ? On a déjà essayé de faire un sudo apt-get install postgresql-contrib-9.4 mais toujours l'erreur. Et même un:
CREATE FUNCTION gin_trgm_triconsistent(internal, int2, text, int4, internal, internal, internal)
RETURNS "char"
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;

ALTER OPERATOR FAMILY gin_trgm_ops USING gin ADD
        OPERATOR        7       %> (text, text),
FUNCTION 6 (text,text) gin_trgm_triconsistent (internal, int2, text, int4, internal, internal, internal);

n'a pas résolu ce problème.

Please help us !!! Merci d'avance

Hors ligne

#2 05/04/2018 21:47:55

gleu
Administrateur

Re : Erreur sur pg_trgm

Il n'existe pas de fonction gin_trgm_triconsistent() dans l'extension pg_trgm de la 9.4. Elle n'apparaît qu'à partir de la version 9.6.


Guillaume.

Hors ligne

#3 06/04/2018 09:43:31

duple
Membre

Re : Erreur sur pg_trgm

Quoi ? En êtes vous sur ? Et pourquoi il y avait pas eu cette erreur avant ?
J'ai une autre question, comment fait on pour installer un contrib dans une instance postgresql en particulier ? Disons que j'ai 3 instances de postgresql donc 3 pgdata également, j'aimerai dans celui correspondant à pddata1 installer les contrib postgresql

Hors ligne

#4 06/04/2018 10:01:00

ruizsebastien
Membre

Re : Erreur sur pg_trgm

bonjour,

Pour installer des extensions :
https://docs.postgresql.fr/9.6/sql-createextension.html


Cordialement,

Sébastien.

Hors ligne

#5 06/04/2018 10:03:27

gleu
Administrateur

Re : Erreur sur pg_trgm

Oui, sûr. Ça fait partie du commit 97f3014647a5bd570032abd2b809d3233003f13f :

commit 97f3014647a5bd570032abd2b809d3233003f13f
Author: Teodor Sigaev <teodor@sigaev.ru>
Date:   Mon Jul 20 18:18:48 2015 +0300

    This supports the triconsistent function for pg_trgm GIN opclass
    to make it faster to implement indexed queries where some keys are 
    common and some are rare.
        
    Patch by Jeff Janes

Intégré le 20 juillet 2015, donc version 9.6. Et sans surprise, ce commit n'apparaît ni dans la branche 9.4 ni dans la branche 9.5. Difficile de dire pourquoi vous n'aviez pas cette erreur avant, on manque d'informations.

Pour l'installation d'un module contrib, ça ne concerne en rien les répertoires de données. Comment avez-vous installé PostgreSQL ? ces trois répertoires sont sur la même version de PostgreSQL ?


Guillaume.

Hors ligne

#6 06/04/2018 12:03:56

rjuju
Administrateur

Re : Erreur sur pg_trgm

Quelle version de pg_trgm est installée sur la base en question en 9.4? (\dx pg_trgm).  Si ce n'est pas la version 1.0 ou 1.1, il y a eu une mauvaise manipulation.

La requête suivante ne devrait retourner aucune ligne sur votre base.  Si elle renvoie des lignes, cela veut dire que postgres essaiera d'appeler la fonction gin_trgm_triconsistent qui n'existe pas en version 9.4:

SELECT am.amname, opf.opfname, ap.amproc, amop.amopopr::regoperator::text
FROM pg_am am
JOIN pg_opfamily opf ON opf.opfmethod = am.oid
JOIN pg_amproc ap ON ap.amprocfamily = opf.oid
JOIN pg_amop amop ON amop.amopfamily = opf.oid
WHERE am.amname = 'gin'
AND opf.opfname = 'gin_trgm_ops'
AND ap.amprocnum = 6;

Hors ligne

#7 06/04/2018 13:39:52

duple
Membre

Re : Erreur sur pg_trgm

gleu > une version de pg 9.3 avec son pgdata et ses lib , puis une autre version pg9.4 avec ses lib mais cette fois ci avec 2 pdgata (1 par instance)
rjuju > pg_trgm 1.3 sur la 9.4
Est il possible d'effecteur une autre installation de postgresql mais ciblant le pgdata d'une instance dejà présente ?

Hors ligne

#8 06/04/2018 14:05:29

ruizsebastien
Membre

Re : Erreur sur pg_trgm

non ce n'est pas possible. Il faut faire une migration des données (pg_upgrade) ou un export import.


Cordialement,

Sébastien.

Hors ligne

#9 06/04/2018 14:39:21

rjuju
Administrateur

Re : Erreur sur pg_trgm

pg_trgm 1.3 sur la 9.4

Votre problème est là.  Vous avez installé pg_trgm d'une version 9.6 ou plus sur votre instance 9.4

Hors ligne

#10 06/04/2018 14:54:26

duple
Membre

Re : Erreur sur pg_trgm

bah la version 1.3 elle marchait bien avant cela pourtant.

Hors ligne

#11 06/04/2018 15:20:50

rjuju
Administrateur

Re : Erreur sur pg_trgm

Je suppose que le .so a été écrasé par une mise à jour de votre version 9.4

Hors ligne

#12 09/04/2018 17:24:25

duple
Membre

Re : Erreur sur pg_trgm

une recompilation de postgres a résolu le problème merci

Hors ligne

Pied de page des forums