23

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を初期化するために何かをする必要がありますか?

4

7 に答える 7

58

postgresql 9.1の場合:

sudo apt-get install postgresql-contribtomaszbakが答えたように(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シェル内:

\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スキーマに拡張機能がインストールされていない場合は、このような関数を使用するときにpublicスキーマを明示的に指定する必要がありますsimilarity

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

Postgres9.4でトリグラムの類似性のためにDjango1.11ORMを使用する関数に対して、Django Test Runnerを実行する場合に、これと同じ問題が発生していました。

私はそれを機能させるためにいくつかのことをしなければなりませんでした:

pg_trgm1)OPは、拡張機能を有効にする必要があるということは正しいです。ただし、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

他の人も苦労している場合:dbが「ttrss」と呼ばれていると仮定して、postgresqlのコマンドラインに切り替えました。

sudo -u postgres psql --dbname=ttrss

次に、そこに拡張機能をインストールします。

CREATE EXTENSION pg_trgm;
于 2021-09-29T08:03:55.183 に答える