Функция сходства в Postgres с pg_trgm

Я пытаюсь использовать функцию подобия в Postgres для выполнения нечеткого соответствия текста, однако всякий раз, когда я пытаюсь его использовать, я получаю ошибку:

function similarity(character varying, unknown) does not exist

Если я добавляю явные приведения к тексту, я получаю ошибку:

function similarity(text, text) does not exist

Мой запрос:

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

Мне нужно что-то сделать, чтобы инициализировать pg_trgm?

Ответы

Ответ 1

Вам нужно установить pg_trgm. В debian, введите этот sql: /usr/share/postgresql/8.4/contrib/pg_trgm.sql. Из командной строки:

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

Или внутри оболочки psql:

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

script по умолчанию устанавливается в общедоступную схему, отредактируйте путь поиска вверху, если вы хотите установить его где-то в другом месте (чтобы удаление/обновление можно было просто удалить из схемы).

Ответ 2

С postgresql 9.1:

после установки (на ubuntu) sudo apt-get install postgresql-contrib как ответил tomaszbak.

вам просто нужно выполнить команду sql:

CREATE EXTENSION pg_trgm;

Ответ 3

На ubuntu вам нужно запустить

sudo apt-get install postgresql-contrib

чтобы получить/usr/share/postgresql/8.4/contrib/pg_trgm.sql

Ответ 4

Если у вас установлено расширение pg_trgm не в схеме public, вы должны явно указать схему при использовании функции similarity, подобной этой

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

Ответ 5

Для Postgres 8.4 выполните следующие действия:

Как работает пользователь sudo:

sudo apt-get install postgresql-contrib-8.4

Переключиться на пользователя postgres:

sudo su - postgres

Run:

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

Перезапуск postgres

Ответ 6

У меня возникла такая же проблема в контексте запуска Django Test Runner для функции, которая использует ORM Django 1.11 для сходства триграмм в Postgres 9.4.

Я должен был сделать несколько вещей, чтобы это заработало:

1) OP правильно, что для этого необходимо включить расширение pg_trgm. Однако в postgres9.4 это включено для каждой -d атабазы. Поскольку Django удаляет и воссоздает тестовую базу данных при каждом запуске, в новой тестовой базе данных расширение не установлено. Чтобы это исправить, я инициализировал расширение pg_trgm в новом шаблоне базы данных -c по умолчанию в postgres. Команда для этого - psql -d template1 -c 'CREATE EXTENSION pg_trgm;' запустить как пользователь postgres.

2) Postgres пришлось перезапустить

3) Тестер Django не распознал это, поэтому мне пришлось обновить его с 1.11.12 до 1.11.18 (возможно, это также исправлено в более новых версиях Django)