2010-02-12 13 views
14

Estoy tratando de utilizar la función de similitud en Postgres para hacer algo de texto coincidente difusa, sin embargo cada vez que trato de usarlo me sale el error:Postgres con pg_trgm

function similarity(character varying, unknown) does not exist 

si añado explícita arroja al texto me sale el error:

function similarity(text, text) does not exist 

Mi consulta es:

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

¿necesito hacer algo para initalize pg_trgm?

Respuesta

9

Tienes que instalar pg_trgm. En debian, fuente este sql: /usr/share/postgresql/8.4/contrib/pg_trgm.sql. Desde la línea de comandos:

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

O dentro de una cáscara psql:

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

Los valores por defecto de secuencia de comandos para la instalación en el esquema público, modifique la ruta de búsqueda en la parte superior si desea instalarlo en otro lugar (para que la desinstalación/actualización se pueda realizar simplemente descartando el esquema).

+0

Posiblemente una pregunta tonta, pero ¿cómo se puede hacer eso? –

7

en Ubuntu necesita ejecutar

sudo apt-get install postgresql-contrib 

para obtener /usr/share/postgresql/8.4/contrib/pg_trgm.sql

+0

Para postgres 8.4. contrib ejecutar 'sudo apt-get install postgresql-contrib-8.4' –

41

con PostgreSQL 9.1:

después de instalar (en ubuntu) sudo apt-get install postgresql-contrib como respondió tomaszbak.

sólo hay que ejecutar el comando SQL:

CREATE EXTENSION pg_trgm; 
+1

Puede valer la pena recordar que, dependiendo de la base de datos, la extensión search_path se podría instalar en un esquema diferente de público. – rsc

+0

nota: ya que tiene que ser superusuario, vaya a la línea de comandos y seleccione su base de datos ** psql --username postgres --dbname database ** y ejecute el comando allí. Solo en la base de datos predeterminada no funcionará para su aplicación de producción –

2

Si usted tiene la extensión pg_trgm instalado no en el esquema public debe especificar explícitamente el esquema cuando se utiliza la función similarity como esto

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

Para Postgres 8.4 haga lo siguiente:

Como usuario sudo plazo:

sudo apt-get install postgresql-contrib-8.4

Cambiar al usuario postgres:

sudo su - postgres

Run:

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

postgres Restart