diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,8 @@
 # Changelog for pg-schema
 
+## 0.7.1.1
+- Add upsertJSONText, upsertJSONText_
+
 ## 0.7.1.0
 - Condition DSL: `(=??)` on nullable columns generates SQL
   `IS NOT DISTINCT FROM` (same null-safe key equality as upsertJSON)
diff --git a/pg-schema.cabal b/pg-schema.cabal
--- a/pg-schema.cabal
+++ b/pg-schema.cabal
@@ -1,6 +1,6 @@
 cabal-version:  3.12
 name:           pg-schema
-version:        0.7.1.0
+version:        0.7.1.1
 category:       Database
 author:         Dmitry Olshansky
 maintainer:     olshanskydr@gmail.com
diff --git a/src/PgSchema/DML.hs b/src/PgSchema/DML.hs
--- a/src/PgSchema/DML.hs
+++ b/src/PgSchema/DML.hs
@@ -103,7 +103,8 @@
   , updateByCond, updateByCond_, updateText, updateText_
   , UpdateReturning, UpdateNonReturning, CRecInfo(..)
   -- ** Tree-base Insert/Upsert
-  , insertJSON, insertJSON_, upsertJSON, upsertJSON_, insertJSONText, insertJSONText_
+  , insertJSON, insertJSON_, upsertJSON, upsertJSON_
+  , insertJSONText, insertJSONText_, upsertJSONText, upsertJSONText_
   , TreeIn, TreeOut, AllMandatoryTree, AllMandatoryOrHasKeyTree, TreeSch
   , InsertTreeNonReturning, InsertTreeReturning
   , UpsertTreeNonReturning, UpsertTreeReturning, TRecordInfo
diff --git a/src/PgSchema/DML/InsertJSON.hs b/src/PgSchema/DML/InsertJSON.hs
--- a/src/PgSchema/DML/InsertJSON.hs
+++ b/src/PgSchema/DML/InsertJSON.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedRecordDot #-}
 module PgSchema.DML.InsertJSON
   ( insertJSON, insertJSON_, upsertJSON, upsertJSON_
-  , insertJSONText, insertJSONText_ ) where
+  , insertJSONText, insertJSONText_, upsertJSONText, upsertJSONText_ ) where
 
 import Control.Monad
 import Control.Monad.RWS
@@ -145,6 +145,19 @@
   , IsString s, Monoid s, Ord s ) => s
 insertJSONText ann @r @r' =
   insertJSONText' True (typDefMap @(AnnSch ann)) (tabInfoMap @(AnnSch ann))
+    (getRecordInfo @ann @r) (getRecordInfo @ann @r').fields
+
+upsertJSONText_ :: forall ann -> forall r s.
+  (IsString s, Monoid s, Ord s, TreeSch ann, CRecInfo ann r) => s
+upsertJSONText_ ann @r =
+  insertJSONText' False (typDefMap @(AnnSch ann)) (tabInfoMap @(AnnSch ann))
+    (getRecordInfo @ann @r) []
+
+upsertJSONText :: forall ann -> forall r r'.
+  ( TreeSch ann, CRecInfo ann r, CRecInfo ann r'
+  , IsString s, Monoid s, Ord s ) => s
+upsertJSONText ann @r @r' =
+  insertJSONText' False (typDefMap @(AnnSch ann)) (tabInfoMap @(AnnSch ann))
     (getRecordInfo @ann @r) (getRecordInfo @ann @r').fields
 
 -- | @isInsertOnly@: plain @INSERT@ only ('insertJSON'); 'False' enables upsert
