2014-04-08 8 views
2

Я новичок в postgres, я работаю над проектом, где мы должны проверить текст по подобию. Я нашел этот модуль pg_trgm, у которого есть несколько функций для работы.Postgres pg_trgm не работает

Я установил postgres + contrib package на ubuntu, но я не могу иметь сходство и другие.

mydb=# CREATE EXTENSION pg_trgm; 
ERROR: extension "pg_trgm" already exists 
mydb=# \dx 
            List of installed extensions 
Name | Version | Schema |         Description        
---------+---------+------------+------------------------------------------------------------------- 
pg_trgm | 1.0  | extensions | text similarity measurement and index searching based on trigrams 
plpgsql | 1.0  | pg_catalog | PL/pgSQL procedural language 
(2 rows) 


mydb=# select similarity('hello','hell'); 
ERROR: function similarity(unknown, unknown) does not exist 
LINE 1: select similarity('hello','hell'); 
     ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

Есть ли другой способ использования pg_trgm?

Спасибо.

Emerson

ответ

2

Модуль был установлен в схему extensions. Я предполагаю, что эта схема не находится в вашем пути поиска, и поэтому функция не найдена. Попробуйте

select extensions.similarity('hello','hell'); 

Если вы не хотите, чтобы полностью квалифицировать имена функций вы можете просто добавить эту схему к вашему search_path:

alter user your_pg_user set search_path = public,extensions; 

Если это все еще дает ошибку ваш пользователь Postgres может не иметь необходимые привилегии для вызова функций. В этом случае войдите в систему как суперпользователь (обычно postgres) и предоставите права:

grant all on schema extensions to your_pg_user; 
+0

Thank. Это сработало. –

1

Должно работать. Здесь протокол PSQL: (извините, система на немецком языке)

[email protected]:~> psql 
psql (9.2.7) 

strobel=# CREATE EXTENSION pg_trgm; 
CREATE EXTENSION 
strobel=# \df 
                  Liste der Funktionen 
Schema |   Name   | Ergebnisdatentyp |       Argumentdatentypen        | Typ 
--------+------------------------+------------------+---------------------------------------------------------------------------+-------- 
public | flipper    | boolean   |                   | normal 
public | gin_extract_query_trgm | internal   | text, internal, smallint, internal, internal, internal, internal   | normal 
public | gin_extract_value_trgm | internal   | text, internal               | normal 
<cut> 
public | gtrgm_union   | integer[]  | bytea, internal               | normal 
public | set_limit    | real    | real                  | normal 
public | show_limit    | real    |                   | normal 
public | show_trgm    | text[]   | text                  | normal 
public | similarity    | real    | text, text                | normal 
public | similarity_dist  | real    | text, text                | normal 
public | similarity_op   | boolean   | text, text                | normal 
(20 Zeilen) 

strobel=# select similarity('hallo', 'hello'); 
similarity 
------------ 
    0.333333 
(1 Zeile) 

Сообщение об ошибке дает подсказку, что ваши параметры не были замечены как текст, так что, возможно вы написали (акцент одиночной обратной кавычки могилу) вместо апострофа.

Смежные вопросы