Somiglianza funzione in Postgres con pg_trgm

Sto cercando di utilizzare la somiglianza funzione in Postgres per fare qualche fuzzy corrispondenza del testo, tuttavia quando provo ad usarlo mi esce l’errore:

function similarity(character varying, unknown) does not exist

Se posso aggiungere cast espliciti testo ricevo l’errore:

function similarity(text, text) does not exist

La mia domanda è:

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

Ho bisogno di fare qualcosa per inizializzare pg_trgm?

 

6 Replies
  1. 9

    È necessario installare pg_trgm. In debian, la fonte questo sql: /usr/share/postgresql/8.4/contrib/pg_trgm.sql. Dalla riga di comando:

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

    O all’interno di un psql shell:

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

    Lo script predefiniti per l’installazione in pubblico, schema, modificare il percorso di ricerca nella parte superiore, se si desidera installare da qualche altra parte (in modo che la disinstallazione/aggiornamento può essere fatto semplicemente facendo cadere lo schema).

    • Forse davvero la domanda stupida, ma come si fa a fare che?
  2. 47

    Con postgresql 9.1:

    dopo l’installazione (su ubuntu) sudo apt-get install postgresql-contrib come tomaszbak risposto.

    basta eseguire il comando sql:

    CREATE EXTENSION pg_trgm;
    • Potrebbe essere la pena di ricordare che, a seconda del database search_path estensione può essere installato in uno schema diverso dal pubblico.
    • nota: dal momento che si deve essere superuser, andare alla riga di comando e selezionare il database psql –nome utente postgres –dbname database eseguire il comando. Solo nel database di default non funziona per la vostra produzione di app
  3. 7

    Su ubuntu, è necessario eseguire un

    sudo apt-get install postgresql-contrib

    per ottenere /usr/share/postgresql/8.4/contrib/pg_trgm.sql

    • Per postgres 8.4. contrib eseguire sudo apt-get install postgresql-contrib-8.4
  4. 3

    Se hai il pg_trgm estensione installata non in public schema è necessario specificare in modo esplicito lo schema quando si utilizza il similarity funzione come questa

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

    Per Postgres 8.4 di fare in seguito:

    Come sudo esecuzione di utente:

    sudo apt-get install postgresql-contrib-8.4

    Su postgres utente:

    sudo su - postgres

    Eseguire:

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

    Riavviare postgres

  6. 1

    Ho avuto questo stesso problema nel contesto dell’esecuzione di Django Test Runner contro una funzione che utilizza il Django 1.11 ORM per trigramma somiglianza a Postgres 9.4.

    Ho dovuto fare un paio di cose per farlo funzionare:

    1) OP è corretto che ciò ha richiesto l’attivazione il pg_trgm estensione. Tuttavia, in postgres9.4 questo è attivata su un singolo database. Dal Django elimina e ricrea il database di test con ogni esecuzione, il nuovo database di test non hanno l’estensione installata. Per risolvere questo problema, ho inizializzato il pg_trgm estensione all’interno del default creato di recente un modello di database in postgres. Il comando per fare questo è psql -d template1 -c 'CREATE EXTENSION pg_trgm;' esegui come il postgres utente.

    2) Postgres doveva essere riavviato

    3) Il Django test runner non riconoscere questo dato di fatto, così ho dovuto aggiornare da Django 1.11.12 per 1.11.18 (presumibilmente si è risolto anche in versioni più recenti di Django)

Lascia un commento