2010-02-12 18 views
14

Sto cercando di utilizzare la funzione di somiglianza in Postgres per fare qualche confronto tra parole fuzzy, però ogni volta che provo ad usarlo ottengo l'errore:somiglianza in Postgres con pg_trgm

function similarity(character varying, unknown) does not exist 

se aggiungo esplicita getta al testo ottengo l'errore:

function similarity(text, text) does not exist 

la mia domanda è:

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

devo fare qualcosa per initalize pg_trgm?

risposta

9

È necessario installare pg_trgm. In debian, inserisci questo sql: /usr/share/postgresql/8.4/contrib/pg_trgm.sql. Dalla riga di comando:

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

o all'interno di un guscio di psql:

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

Le impostazioni predefinite di script per l'installazione nello schema pubblico, modificare il percorso di ricerca in alto, se si desidera installare da qualche altra parte (in modo che la disinstallazione/l'aggiornamento possa essere fatto semplicemente facendo cadere lo schema).

+0

Forse una domanda davvero stupida, ma come si fa? –

7

su Ubuntu è necessario eseguire

sudo apt-get install postgresql-contrib 

per ottenere /usr/share/postgresql/8.4/contrib/pg_trgm.sql

+0

Per postgres 8.4. contrib run 'sudo apt-get install postgresql-contrib-8.4' –

41

con PostgreSQL 9.1:

dopo l'installazione (su Ubuntu) sudo apt-get install postgresql-contrib come risposta tomaszbak.

devi solo eseguire il comando SQL:

CREATE EXTENSION pg_trgm; 
+1

Potrebbe valere la pena ricordare che, a seconda dell'estensione search_path del database, potrebbe essere installata in uno schema diverso da quello pubblico. – rsc

+0

nota: dato che devi essere superutente, vai alla riga di comando e seleziona il tuo database ** psql --username postgres - database dbname ** ed esegui il comando lì. Solo nel database predefinito non funzionerà per la tua app di produzione –

2

Se avete l'estensione pg_trgm installato non nel public schema è necessario specificare in modo esplicito lo schema quando si utilizza la funzione di similarity come questo

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

Per Postgres 8.4 fare quanto segue:

come Run utente sudo:

sudo apt-get install postgresql-contrib-8.4

Passa a utente postgres:

sudo su - postgres

Run:

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

Riavviare Postgres