diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for influxdb
 
+## v1.9.3 - 2023-06-29
+
+* Mitigate InfluxDB compatibility problems ([#94](https://github.com/maoe/influxdb-haskell/pull/94))
+* Support GHC 9.4 and 9.6 ([#95](https://github.com/maoe/influxdb-haskell/pull/95) and [#97](https://github.com/maoe/influxdb-haskell/pull/97))
+* Revitalize CI ([#96](https://github.com/maoe/influxdb-haskell/pull/96))
+
 ## v1.9.2.2 - 2021-11-21
 
 * Update dependencies
diff --git a/influxdb.cabal b/influxdb.cabal
--- a/influxdb.cabal
+++ b/influxdb.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.24
 name: influxdb
-version: 1.9.2.2
+version: 1.9.3
 synopsis: InfluxDB client library for Haskell
 description:
   @influxdb@ is an InfluxDB client library for Haskell.
@@ -11,21 +11,26 @@
 license-file: LICENSE
 author: Mitsutoshi Aoe
 maintainer: Mitsutoshi Aoe <me@maoe.name>
-copyright: Copyright (C) 2014-2021 Mitsutoshi Aoe
+copyright: Copyright (C) 2014-2023 Mitsutoshi Aoe
 category: Database
 build-type: Custom
 tested-with:
   GHC == 8.4.4
   GHC == 8.6.5
   GHC == 8.8.4
-  GHC == 8.10.4
-  GHC == 9.0.1
+  GHC == 8.10.7
+  GHC == 9.0.2
+  GHC == 9.2.8
+  GHC == 9.4.5
+  GHC == 9.6.2
 
 extra-source-files:
   README.md
-  CHANGELOG.md
   cabal.project
 
+extra-doc-files:
+  CHANGELOG.md
+
 flag examples
   description: Build examples
   default: False
@@ -34,7 +39,7 @@
 custom-setup
  setup-depends:
       base >= 4 && < 5
-    , Cabal >= 1.24
+    , Cabal >= 1.24 && < 3.11
     , cabal-doctest >= 1 && < 1.1
 
 library
@@ -74,8 +79,8 @@
     ViewPatterns
   ghc-options: -Wall
   build-depends:
-      base >= 4.11 && < 4.17
-    , aeson >= 0.7 && < 2.1
+      base >= 4.11 && < 4.19
+    , aeson >= 0.7 && < 2.2
     , attoparsec < 0.15
     , bytestring >= 0.10 && < 0.12
     , clock >= 0.7 && < 0.9
@@ -83,15 +88,15 @@
     , foldl < 1.5
     , http-client >= 0.5 && < 0.8
     , http-types >= 0.8.6 && < 0.13
-    , lens >= 4.9 && < 5.2
+    , lens >= 4.9 && < 5.3
     , network >= 2.6 && < 3.2
     , optional-args >= 1.0 && < 1.1
     , scientific >= 0.3.3 && < 0.4
     , tagged >= 0.1 && < 0.9
-    , text < 1.3
+    , text < 2.1
     , time >= 1.5 && < 1.14
     , unordered-containers < 0.3
-    , vector >= 0.10 && < 0.13
+    , vector >= 0.10 && < 0.14
   hs-source-dirs: src
   default-language: Haskell2010
 
@@ -100,9 +105,9 @@
   main-is:             doctests.hs
   build-depends:
       base
-    , doctest >= 0.11.3 && < 0.21
+    , doctest >= 0.11.3 && < 0.22
     , influxdb
-    , template-haskell
+    , template-haskell < 2.21
   ghc-options: -Wall -threaded
   hs-source-dirs: tests
   default-language: Haskell2010
@@ -115,8 +120,8 @@
     , containers
     , influxdb
     , lens
-    , tasty
-    , tasty-hunit
+    , tasty < 1.5
+    , tasty-hunit < 1.11
     , time
     , raw-strings-qq >= 1.1 && < 1.2
     , vector
diff --git a/src/Database/InfluxDB/JSON.hs b/src/Database/InfluxDB/JSON.hs
--- a/src/Database/InfluxDB/JSON.hs
+++ b/src/Database/InfluxDB/JSON.hs
@@ -55,6 +55,12 @@
 
 import Database.InfluxDB.Types
 
+-- $setup
+-- >>> import Data.Maybe
+-- >>> import Data.Aeson (decode)
+-- >>> import Database.InfluxDB.JSON
+-- >>> import qualified Data.Aeson.Types as A
+
 -- | Parse a JSON response with the 'strictDecoder'.
 parseResultsWith
   :: (Maybe Text -> HashMap Text Text -> Vector Text -> Array -> A.Parser a)
@@ -200,8 +206,12 @@
   return (name, tags, columns, values)
 
 -- | Parse the common JSON structure used in failure response.
+-- >>> A.parse parseErrorObject $ fromJust $ decode "{ \"error\": \"custom error\" }"
+-- Success "custom error"
+-- >>> A.parse parseErrorObject $ fromJust $ decode "{ \"message\": \"custom error\" }"
+-- Success "custom error"
 parseErrorObject :: A.Value -> A.Parser String
-parseErrorObject = A.withObject "error" $ \obj -> obj .: "error"
+parseErrorObject = A.withObject "error" $ \obj -> obj .: "error" <|> obj .: "message"
 
 -- | Parse either a POSIX timestamp or RFC3339 formatted timestamp as 'UTCTime'.
 parseUTCTime :: Precision ty -> A.Value -> A.Parser UTCTime
diff --git a/src/Database/InfluxDB/Write/UDP.hs b/src/Database/InfluxDB/Write/UDP.hs
--- a/src/Database/InfluxDB/Write/UDP.hs
+++ b/src/Database/InfluxDB/Write/UDP.hs
@@ -31,7 +31,8 @@
 This module is desined to be used with the [network]
 (https://hackage.haskell.org/package/network) package and be imported qualified.
 
->>> :set -XOverloadedStrings -XOverloadedLists
+>>> :set -XOverloadedStrings -XNoOverloadedLists
+>>> import qualified Data.Map as Map
 >>> import Data.Time
 >>> import Network.Socket
 >>> import Database.InfluxDB
@@ -39,7 +40,7 @@
 >>> sock <- Network.Socket.socket AF_INET Datagram defaultProtocol
 >>> let localhost = tupleToHostAddress (127, 0, 0, 1)
 >>> let params = UDP.writeParams sock $ SockAddrInet 8089 localhost
->>> UDP.write params $ Line "measurement1" [] [("value", FieldInt 42)] (Nothing :: Maybe UTCTime)
+>>> UDP.write params $ Line "measurement1" Map.empty (Map.fromList [("value", FieldInt 42)]) (Nothing :: Maybe UTCTime)
 >>> close sock
 
 Make sure that the UDP service is enabled in the InfluxDB config. This API
diff --git a/tests/regressions.hs b/tests/regressions.hs
--- a/tests/regressions.hs
+++ b/tests/regressions.hs
@@ -37,8 +37,10 @@
   case r of
     Left err -> case err of
       UnexpectedResponse message _ _ ->
-        message @?=
-          "BUG: parsing Int failed, expected Number, but encountered String in Database.InfluxDB.Query.query"
+        message `elem` [
+          "BUG: parsing Int failed, expected Number, but encountered String in Database.InfluxDB.Query.query",
+          "BUG: expected Int, encountered String in Database.InfluxDB.Query.query"
+        ] @? "Correct error message."
       _ ->
         assertFailure $ got ++ show err
     Right (v :: (V.Vector (Tagged "time" Int, Tagged "value" Int))) ->
