Функция сходства в Postgres с pg_trgm - PullRequest
17 голосов
/ 12 февраля 2010

Я пытаюсь использовать функцию подобия в 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?

Ответы [ 6 ]

47 голосов
/ 15 мая 2013

С postgresql 9.1:

после установки (в Ubuntu) sudo apt-get install postgresql-contrib, как ответил Томашбак.

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

* +1007 *
9 голосов
/ 12 февраля 2010

Вы должны установить 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

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

7 голосов
/ 27 октября 2011

В Ubuntu вам нужно запустить

sudo apt-get install postgresql-contrib

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

3 голосов
/ 12 июля 2014

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

* +1007 *
2 голосов
/ 06 ноября 2014

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

От имени пользователя sudo:

sudo apt-get install postgresql-contrib-8.4

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

sudo su - postgres

Пробег:

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

Перезапустить postgres

1 голос
/ 24 января 2019

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

Мне пришлось сделать несколько вещей, чтобы это заработало:

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

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

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

...