How to Install PostgreSQL Fuzzy String Matching Extensions (fuzzystrmatch.sql & pg_trgm.sql) on macOS


3 views

Before installing any extensions, ensure you have:

  • PostgreSQL server running (version 9.1+)
  • Admin/SUPERUSER privileges
  • Basic command line familiarity

These extensions typically come pre-installed with PostgreSQL. Find them in:

/usr/local/share/postgresql/extension/
/usr/share/postgresql/<version>/extension/

The simplest method is through PostgreSQL's interactive terminal:

psql -U postgres -d your_database
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION pg_trgm;

If automatic extension loading fails, execute the SQL files directly:

psql -U postgres -d your_database -f /path/to/fuzzystrmatch.sql
psql -U postgres -d your_database -f /path/to/pg_trgm.sql

Check successful installation with:

SELECT levenshtein('kitten', 'sitting');
SELECT show_trgm('hello');

Fuzzy string matching in action:

-- Find similar product names
SELECT product_name 
FROM products 
WHERE levenshtein(product_name, 'Adidas Runfalcon') < 3;

-- Advanced trigram search
SELECT title 
FROM articles 
WHERE similarity(title, 'PostgresSQL Performance') > 0.3;
  • Extension not found: Verify PostgreSQL contrib package is installed
  • Permission denied: Use sudo or proper database privileges
  • Version mismatch: Ensure extension version matches your PostgreSQL

When using these extensions:

  • Create trigram indexes for large datasets
  • Combine with other string functions
  • Consider caching frequent queries

When working with textual data in PostgreSQL, exact matches often aren't enough. That's where extensions like fuzzystrmatch and pg_trgm become essential. These provide powerful functions for:

  • Levenshtein distance calculations
  • Soundex phonetic matching
  • Trigram similarity comparisons

Before proceeding, verify your PostgreSQL installation:

psql --version
which psql

Also ensure you have admin access to create extensions:

psql -U postgres -c "SELECT current_user;"

The extensions are typically included with PostgreSQL but need activation:

psql -U postgres -d your_database -c "CREATE EXTENSION fuzzystrmatch;"
psql -U postgres -d your_database -c "CREATE EXTENSION pg_trgm;"

Check available functions with:

psql -U postgres -d your_database -c "\df *.*levenshtein*"
psql -U postgres -d your_database -c "\df *.*similarity*"

Try these common fuzzy matching scenarios:

-- Levenshtein distance
SELECT levenshtein('kitten', 'sitting');

-- Trigram similarity
SELECT similarity('PostgreSQL', 'Postgre SQL');

-- Metaphone phonetic matching
SELECT dmetaphone('algorithm'), dmetaphone('algorithum');

If you encounter permission errors:

ERROR: permission denied to create extension "pg_trgm"

Connect as superuser:

psql -U postgres -c "ALTER USER your_user WITH SUPERUSER;"

For large datasets, create trigram indexes:

CREATE INDEX users_name_trgm_idx ON users 
USING gin (name gin_trgm_ops);

Create powerful matching queries:

SELECT * FROM products 
WHERE similarity(name, 'Galxy S20') > 0.4
ORDER BY similarity(name, 'Galxy S20') DESC
LIMIT 5;