2010-02-12 4 views
14

Je suis en train d'utiliser la fonction de similarité dans Postgres pour faire un peu le texte correspondant flou, mais chaque fois que j'essaie de l'utiliser je reçois l'erreur:fonction de similarité dans Postgres avec pg_trgm

function similarity(character varying, unknown) does not exist 

Si j'ajouter explicitement moulages au texte que je reçois l'erreur:

function similarity(text, text) does not exist 

Ma requête est:

SELECT (similarity("table"."field"::text, %s::text)) AS "similarity", "table".* FROM "table" WHERE similarity > .5 ORDER BY "similarity" DESC LIMIT 10 

ai-je besoin de faire quelque chose à Initalize pg_trgm?

Répondre

9

Vous devez installer pg_trgm. Dans Debian, source ce sql: /usr/share/postgresql/8.4/contrib/pg_trgm.sql. A partir de la ligne de commande:

psql -f /usr/share/postgresql/8.4/contrib/pg_trgm.sql 

ou à l'intérieur d'une coquille psql:

\i /usr/share/postgresql/8.4/contrib/pg_trgm.sql 

Les paramètres par défaut de script pour l'installation dans le schéma public, modifiez le chemin de recherche en haut si vous voulez l'installer ailleurs (de sorte que la désinstallation/mise à niveau peut être effectuée simplement en supprimant le schéma).

+0

Question peut-être vraiment stupide, mais comment fait-on cela? –

7

Sur ubuntu vous devez exécuter

sudo apt-get install postgresql-contrib 

pour obtenir /usr/share/postgresql/8.4/contrib/pg_trgm.sql

+0

Pour postgres 8.4. contrib exécute 'sudo apt-get install postgresql-contrib-8.4' –

41

Avec postgresql 9.1:

après l'installation (sur ubuntu sudo apt-get install postgresql-contrib comme répondu tomaszbak.

il vous suffit d'exécuter la commande SQL:

CREATE EXTENSION pg_trgm; 
+1

Il peut être utile de se souvenir qu'en fonction de l'extension search_path de la base de données, elle peut être installée dans un schéma différent de public. – rsc

+0

note: puisque vous devez être super-utilisateur, allez dans la ligne de commande et sélectionnez votre base de données ** psql --username postgres --dbname base de données ** et exécutez la commande là. Juste dans la base de données par défaut ne fonctionnera pas pour votre application de production –

2

Si vous avez l'extension pg_trgm installé pas dans le schéma public vous devez spécifier explicitement le schéma lorsque vous utilisez la fonction similarity comme celui-ci

select schema.similarity(foo,bar) from schema.baz 
2

Pour Postgres 8.4 faire suit:

Comme course utilisateur sudo:

sudo apt-get install postgresql-contrib-8.4

Passer à l'utilisateur postgres:

sudo su - postgres

Run:

psql -U DB_USER -d DB_NAME -f /usr/share/postgresql/8.4/contrib/pg_trgm.sql

Redémarrez postgres

Questions connexes