diff --git a/esqueleto.cabal b/esqueleto.cabal
--- a/esqueleto.cabal
+++ b/esqueleto.cabal
@@ -1,5 +1,5 @@
 name:                esqueleto
-version:             2.2.2
+version:             2.2.3
 synopsis:            Type-safe EDSL for SQL queries on persistent backends.
 homepage:            https://github.com/prowdsponsor/esqueleto
 license:             BSD3
diff --git a/src/Database/Esqueleto.hs b/src/Database/Esqueleto.hs
--- a/src/Database/Esqueleto.hs
+++ b/src/Database/Esqueleto.hs
@@ -46,7 +46,7 @@
              , random_, round_, ceiling_, floor_
              , min_, max_, sum_, avg_, lower_
              , coalesce, coalesceDefault
-             , like, (%), concat_, (++.)
+             , like, ilike, (%), concat_, (++.)
              , subList_select, subList_selectDistinct, valList
              , in_, notIn, exists, notExists
              , set, (=.), (+=.), (-=.), (*=.), (/=.)
diff --git a/src/Database/Esqueleto/Internal/Language.hs b/src/Database/Esqueleto/Internal/Language.hs
--- a/src/Database/Esqueleto/Internal/Language.hs
+++ b/src/Database/Esqueleto/Internal/Language.hs
@@ -276,6 +276,12 @@
 
   -- | @LIKE@ operator.
   like :: (PersistField s, IsString s) => expr (Value s) -> expr (Value s) -> expr (Value Bool)
+  -- | @ILIKE@ operator (case-insensitive @LIKE@).
+  --
+  -- Supported by PostgreSQL only.
+  --
+  -- /Since: 2.2.3/
+  ilike :: (PersistField s, IsString s) => expr (Value s) -> expr (Value s) -> expr (Value Bool)
   -- | The string @'%'@.  May be useful while using 'like' and
   -- concatenation ('concat_' or '++.', depending on your
   -- database).  Note that you always to type the parenthesis,
@@ -391,7 +397,7 @@
 infixr 5 ++.
 infix  4 ==., >=., >., <=., <., !=.
 infixr 3 &&., =., +=., -=., *=., /=.
-infixr 2 ||., `like`
+infixr 2 ||., `like`, `ilike`
 infixl 2 `InnerJoin`, `CrossJoin`, `LeftOuterJoin`, `RightOuterJoin`, `FullOuterJoin`
 
 -- | Syntax sugar for 'case_'.
diff --git a/src/Database/Esqueleto/Internal/Sql.hs b/src/Database/Esqueleto/Internal/Sql.hs
--- a/src/Database/Esqueleto/Internal/Sql.hs
+++ b/src/Database/Esqueleto/Internal/Sql.hs
@@ -445,6 +445,7 @@
   coalesceDefault exprs = unsafeSqlFunctionParens "COALESCE" . (exprs ++) . return . just
 
   like    = unsafeSqlBinOp    " LIKE "
+  ilike   = unsafeSqlBinOp    " ILIKE "
   (%)     = unsafeSqlValue    "'%'"
   concat_ = unsafeSqlFunction "CONCAT"
   (++.)   = unsafeSqlBinOp    " || "
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -860,7 +860,7 @@
 #endif
 #endif
 
-    describe "text functions" $
+    describe "text functions" $ do
       it "like, (%) and (++.) work on a simple example" $
          run $ do
            [p1e, p2e, p3e, p4e] <- mapM insert' [p1, p2, p3, p4]
@@ -874,6 +874,21 @@
            nameContains "h"  [p1e, p2e]
            nameContains "i"  [p4e, p3e]
            nameContains "iv" [p4e]
+
+#if defined(WITH_POSTGRESQL)
+      it "ilike, (%) and (++.) work on a simple example on PostgreSQL" $
+         run $ do
+           [p1e, p2e, p3e, p4e, p5e] <- mapM insert' [p1, p2, p3, p4, p5]
+           let nameContains t expected = do
+                 ret <- select $
+                        from $ \p -> do
+                        where_ (p ^. PersonName `ilike` (%) ++. val t ++. (%))
+                        orderBy [asc (p ^. PersonName)]
+                        return p
+                 liftIO $ ret `shouldBe` expected
+           nameContains "mi" [p3e, p5e]
+           nameContains "JOHN" [p1e]
+#endif
 
     describe "delete" $
       it "works on a simple example" $
