diff --git a/src/metabase/api/common/internal.clj b/src/metabase/api/common/internal.clj
index 04bc2761784618c56bf616503a4a1ac091934a03..a5f5b874521980650b1f96a088f98464427f99f0 100644
--- a/src/metabase/api/common/internal.clj
+++ b/src/metabase/api/common/internal.clj
@@ -1,9 +1,11 @@
 (ns metabase.api.common.internal
   "Internal functions used by `metabase.api.common`."
-  (:require [clojure.tools.logging :as log]
+  (:require [clojure.java.jdbc :as jdbc]
+            [clojure.string :as s]
             [medley.core :as m]
             [swiss.arrows :refer :all]
-            [metabase.util :as u]))
+            [metabase.util :as u])
+  (:import java.sql.SQLException))
 
 ;;; # DEFENDPOINT HELPER FUNCTIONS + MACROS
 
@@ -232,10 +234,12 @@
                       status-code            message
                       ;; Otherwise it's a 500. Return a body that includes exception & filtered stacktrace for debugging purposes
                       :else                  (let [stacktrace (u/filtered-stacktrace e)]
-                                               (log/debug message "\n" (u/pprint-to-str stacktrace))
-                                               (assoc other-info
-                                                      :message message
-                                                      :stacktrace stacktrace)))}))))
+                                               (merge (assoc other-info
+                                                        :message    message
+                                                        :stacktrace stacktrace)
+                                                      (when (instance? SQLException e)
+                                                        {:sql-exception-chain (s/split (with-out-str (jdbc/print-sql-exception-chain e))
+                                                                                       #"\s*\n\s*")}))))}))))
 
 (defmacro catch-api-exceptions
   "Execute BODY, and if an exception is thrown, return the appropriate HTTP response."
diff --git a/src/metabase/models/segment.clj b/src/metabase/models/segment.clj
index efe64501bc89a376704c6efdb08189bd50f123c7..c0973fb84a0eb863cdaad3e1744a86191812b005 100644
--- a/src/metabase/models/segment.clj
+++ b/src/metabase/models/segment.clj
@@ -112,7 +112,7 @@
          (integer? user-id)
          (string? revision_message)]}
   ;; update the segment itself
-  (db/update! Segment id
+  (db/update-non-nil-keys! Segment id
     :name                    name
     :description             description
     :caveats                 caveats
diff --git a/src/metabase/util.clj b/src/metabase/util.clj
index 8bef222d58ef376c93c96638457418b80dfcf24e..4b2a0621420acea6d8c7241cd6cc05ce703a4d98 100644
--- a/src/metabase/util.clj
+++ b/src/metabase/util.clj
@@ -16,7 +16,7 @@
            (java.net Socket
                      InetSocketAddress
                      InetAddress)
-           java.sql.Timestamp
+           (java.sql SQLException Timestamp)
            (java.util Calendar TimeZone)
            javax.xml.bind.DatatypeConverter
            org.joda.time.format.DateTimeFormatter))
@@ -560,7 +560,7 @@
      (fn [& args]
        (try
          (apply f args)
-         (catch java.sql.SQLException e
+         (catch SQLException e
            (log/error (format-color 'red "%s\n%s\n%s"
                                     exception-message
                                     (with-out-str (jdbc/print-sql-exception-chain e))