pg_trgm

pg_trgm

pg_trgm : text similarity measurement and index searching based on trigrams

Overview

ID Extension Package Version Category License Language
2390
pg_trgm
pg_trgm
1.6
FTS
PostgreSQL
C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-dt-
No
Yes
No
Yes
no
yes
Relationships
See Also
pg_similarity
pg_bigm
fuzzystrmatch
unaccent
smlar
pgroonga_database
rum
citext

Packages

PG18 PG17 PG16 PG15 PG14
1.6
1.6
1.6
1.6
1.6

This is a built-in contrib extension ship with the PostgreSQL kernel

Install

Create this extension with:

CREATE EXTENSION pg_trgm;

Usage

pg_trgm: Text similarity measurement and index searching based on trigrams

The pg_trgm module provides functions and operators for determining the similarity of alphanumeric text based on trigram matching, plus index operator classes for fast string similarity searches.

CREATE EXTENSION pg_trgm;

A trigram is a group of three consecutive characters from a string. Two strings are similar if they share many trigrams.

Functions

Function Description
similarity(text, text)real Returns similarity between 0 and 1
show_trgm(text)text[] Returns array of all trigrams in the string
word_similarity(text, text)real Similarity of first string to most similar word in second
strict_word_similarity(text, text)real Similar but with stricter word boundary matching
show_limit()real (Deprecated) Returns pg_trgm.similarity_threshold
set_limit(real)real (Deprecated) Sets pg_trgm.similarity_threshold
SELECT similarity('word', 'two words');
-- 0.36363637

SELECT show_trgm('word');
-- {"  w"," wo",ord,"rd ",wor}

Operators

Operator Description
text % textboolean True if similarity > pg_trgm.similarity_threshold
text <% textboolean True if word similarity > pg_trgm.word_similarity_threshold
text %> textboolean Commutator of <%
text <<% textboolean True if strict word similarity > threshold
text %>> textboolean Commutator of <<%
text <-> textreal Distance (1 - similarity)
text <<-> textreal Word distance (1 - word_similarity)
text <->> textreal Commutator of <<->
text <<<-> textreal Strict word distance
text <->>> textreal Commutator of <<<->

GUC Parameters

Parameter Default Description
pg_trgm.similarity_threshold 0.3 Threshold for % operator
pg_trgm.word_similarity_threshold 0.6 Threshold for <% and %> operators
pg_trgm.strict_word_similarity_threshold 0.5 Threshold for <<% and %>> operators

Index Support

GiST and GIN indexes support the similarity operators:

-- GIN index (faster lookups, slower builds)
CREATE INDEX trgm_idx ON test_trgm USING GIN (t gin_trgm_ops);

-- GiST index (supports distance operators for KNN)
CREATE INDEX trgm_idx ON test_trgm USING GIST (t gist_trgm_ops);

-- GiST with custom signature length
CREATE INDEX trgm_idx ON test_trgm USING GIST (t gist_trgm_ops(siglen=32));

Text Search Example

Using trigram indexes to speed up LIKE / ILIKE / regex queries:

SELECT t, similarity(t, 'word') AS sml
FROM test_trgm
WHERE t % 'word'
ORDER BY sml DESC, t;

-- KNN search using distance operator
SELECT t, t <-> 'word' AS dist
FROM test_trgm
ORDER BY dist
LIMIT 10;

GIN and GiST trigram indexes also accelerate LIKE, ILIKE, ~, and ~* queries automatically.

Last updated on