citext

citext

citext : data type for case-insensitive character strings

Overview

ID Extension Package Version Category License Language
3980
citext
citext
1.6
TYPE
PostgreSQL
C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-dt-
No
Yes
No
Yes
no
yes
Relationships
See Also
prefix
semver
ltree
unaccent
unit
pgpdf
pglite_fusion
md5hash

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 citext;

Usage

citext: case-insensitive character string type

The citext extension provides a case-insensitive text type that eliminates the need for lower() calls in queries.

CREATE EXTENSION citext;

Basic Usage

CREATE TABLE users (  nick citext PRIMARY KEY,  pass text NOT NULL );  INSERT INTO users VALUES ('Larry', 'secret123');  -- Case-insensitive matching SELECT * FROM users WHERE nick = 'larry'; -- matches 'Larry' SELECT * FROM users WHERE nick = 'LARRY'; -- matches 'Larry'

Behavior

citext performs comparisons by internally converting strings to lowercase. The following operations are case-insensitive with citext:

  • Comparison operators: =, <>, <, >, <=, >=
  • Pattern matching: LIKE, ILIKE, ~~, ~~*
  • Regular expressions: ~, ~*, !~, !~*

Case-Insensitive Functions

When arguments are citext, these functions perform case-insensitive matching:

regexp_match(), regexp_matches(), regexp_replace(), regexp_split_to_array(), regexp_split_to_table(), replace(), split_part(), strpos(), translate()

Advantages Over lower()

  • Eliminates verbose lower() calls in WHERE clauses
  • Supports case-insensitive PRIMARY KEY and UNIQUE constraints
  • No need for functional indexes
  • Transparent case-folding in all operations

Limitations

  • Case-folding depends on LC_CTYPE at database creation
  • Slightly less efficient than text (copying and conversion overhead)
  • Does not support B-tree deduplication
  • For better Unicode handling, consider nondeterministic collations instead
Last updated on