23

I'm trying to use the similarity function in Postgres to do some fuzzy text matching, however whenever I try to use it I get the error:

function similarity(character varying, unknown) does not exist

If I add explicit casts to text I get the error:

function similarity(text, text) does not exist

My query is:

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

Do I need to do something to initalize pg_trgm?

4

7 回答 7

58

使用 PostgreSQL 9.1:

sudo apt-get install postgresql-contrib按照tomaszbak的回答安装(在ubuntu上)之后。

你只需要执行 sql 命令:

CREATE EXTENSION pg_trgm;
于 2013-05-14T20:50:26.927 回答
10

你必须安装 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 shell 中:

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

该脚本默认安装在公共架构中,如果您想将其安装在其他地方,请编辑顶部的搜索路径(以便卸载/升级只需删除架构即可完成)。

于 2010-02-12T20:54:53.937 回答
7

在 ubuntu 上你需要运行

sudo apt-get install postgresql-contrib

获取 /usr/share/postgresql/8.4/contrib/pg_trgm.sql

于 2011-10-27T13:32:23.383 回答
5

如果您没有在架构中pg_trgm安装扩展,则必须在使用这样的功能时明确指定架构publicsimilarity

select schema.similarity(foo,bar) from schema.baz
于 2014-07-12T09:55:24.057 回答
2

对于 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

于 2014-11-06T12:18:56.753 回答
1

在针对使用 Django 1.11 ORM 在 Postgres 9.4 上进行三元相似性的函数运行 Django Test Runner 的上下文中,我遇到了同样的问题。

我必须做一些事情才能让它工作:

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 中也已修复)

于 2019-01-24T18:16:06.980 回答
0

万一其他人也在苦苦挣扎:假设数据库被称为“ttrss”,我切换到postgresql的命令行:

sudo -u postgres psql --dbname=ttrss

然后在那里安装扩展:

CREATE EXTENSION pg_trgm;
于 2021-09-29T08:03:55.183 回答