diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 2.6.0
+* [persistent#846](https://github.com/yesodweb/persistent/pull/846): Improve error message when marshalling fails
+* [persistent#826](https://github.com/yesodweb/persistent/pull/826): Change `Unique` derive `Show`
+
 ## 2.5.4
 
 * [persistent#778](https://github.com/yesodweb/persistent/issues/778): Add `persistManyFileWith`.
diff --git a/Database/Persist/TH.hs b/Database/Persist/TH.hs
--- a/Database/Persist/TH.hs
+++ b/Database/Persist/TH.hs
@@ -524,7 +524,16 @@
             Nothing
 #endif
             (map (mkUnique mps t) $ entityUniques t)
-            []
+            (derivClause $ entityUniques t)
+  where
+    derivClause [] = []
+#if MIN_VERSION_template_haskell(2,12,0)
+    derivClause _  = [DerivClause Nothing [ConT ''Show]]
+#elif MIN_VERSION_template_haskell(2,11,0)
+    derivClause _  = [ConT ''Show]
+#else
+    derivClause _  = [''Show]
+#endif
 
 mkUnique :: MkPersistSettings -> EntityDef -> UniqueDef -> Con
 mkUnique mps t (UniqueDef (HaskellName constr) _ fields attrs) =
@@ -665,9 +674,6 @@
 mapLeft _ (Right r) = Right r
 mapLeft f (Left l)  = Left (f l)
 
-fieldError :: Text -> Text -> Text
-fieldError fieldName err = "Couldn't parse field `" `mappend` fieldName `mappend` "` from database results: " `mappend` err
-
 mkFromPersistValues :: MkPersistSettings -> EntityDef -> Q [Clause]
 mkFromPersistValues _ t@(EntityDef { entitySum = False }) =
     fromValues t "fromPersistValues" entE $ entityFields t
@@ -971,37 +977,53 @@
 headNote xs = error $ "mkKeyFromValues: expected a list of one element, got: "
   `mappend` show xs
 
-
 fromValues :: EntityDef -> Text -> Exp -> [FieldDef] -> Q [Clause]
 fromValues t funName conE fields = do
-    x <- newName "x"
-    let funMsg = entityText t `mappend` ": " `mappend` funName `mappend` " failed on: "
-    patternMatchFailure <-
-      [|Left $ mappend funMsg (pack $ show $(return $ VarE x))|]
-    suc <- patternSuccess fields
-    return [ suc, normalClause [VarP x] patternMatchFailure ]
+  x <- newName "x"
+  let funMsg = entityText t `mappend` ": " `mappend` funName `mappend` " failed on: "
+  patternMatchFailure <- [|Left $ mappend funMsg (pack $ show $(return $ VarE x))|]
+  suc <- patternSuccess
+  return [ suc, normalClause [VarP x] patternMatchFailure ]
   where
-    patternSuccess [] = do
-      rightE <- [|Right|]
-      return $ normalClause [ListP []] (rightE `AppE` conE)
-    patternSuccess fieldsNE = do
-        x1 <- newName "x1"
-        restNames <- mapM (\i -> newName $ "x" `mappend` show i) [2..length fieldsNE]
-        (fpv1:mkPersistValues) <- mapM mkPvFromFd fieldsNE
-        app1E <- [|(<$>)|]
-        let conApp = infixFromPersistValue app1E fpv1 conE x1
-        applyE <- [|(A.<*>)|]
-        let applyFromPersistValue = infixFromPersistValue applyE
+    patternSuccess =
+      case fields of
+        [] -> do
+          rightE <- [|Right|]
+          return $ normalClause [ListP []] (rightE `AppE` conE)
+        _ -> do
+          x1 <- newName "x1"
+          restNames <- mapM (\i -> newName $ "x" `mappend` show i) [2..length fields]
+          (fpv1:mkPersistValues) <- mapM mkPersistValue fields
+          app1E <- [|(<$>)|]
+          let conApp = infixFromPersistValue app1E fpv1 conE x1
+          applyE <- [|(A.<*>)|]
+          let applyFromPersistValue = infixFromPersistValue applyE
 
-        return $ normalClause
-            [ListP $ map VarP (x1:restNames)]
-            (foldl' (\exp (name, fpv) -> applyFromPersistValue fpv exp name) conApp (zip restNames mkPersistValues))
-        where
-          infixFromPersistValue applyE fpv exp name =
-              UInfixE exp applyE (fpv `AppE` VarE name)
-          mkPvFromFd = mkPersistValue . unHaskellName . fieldHaskell
-          mkPersistValue fieldName = [|mapLeft (fieldError fieldName) . fromPersistValue|]
+          return $ normalClause
+              [ListP $ map VarP (x1:restNames)]
+              (foldl' (\exp (name, fpv) -> applyFromPersistValue fpv exp name) conApp (zip restNames mkPersistValues))
 
+    infixFromPersistValue applyE fpv exp name =
+      UInfixE exp applyE (fpv `AppE` VarE name)
+
+    mkPersistValue field =
+      [|mapLeft (fieldError t field) . fromPersistValue|]
+
+fieldError :: EntityDef -> FieldDef -> Text -> Text
+fieldError entity field err = mconcat
+  [ "Couldn't parse field `"
+  , fieldName
+  , "` from table `"
+  , tableName
+  , "`. "
+  , err
+  ]
+  where
+    fieldName =
+      unHaskellName (fieldHaskell field)
+
+    tableName =
+      unDBName (entityDB entity)
 
 mkEntity :: EntityMap -> MkPersistSettings -> EntityDef -> Q [Dec]
 mkEntity entMap mps t = do
diff --git a/persistent-template.cabal b/persistent-template.cabal
--- a/persistent-template.cabal
+++ b/persistent-template.cabal
@@ -1,5 +1,5 @@
 name:            persistent-template
-version:         2.5.4
+version:         2.6.0
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -23,13 +23,13 @@
                    , text                     >= 0.5
                    , transformers             >= 0.2       && < 0.6
                    , containers
-                   , aeson                    >= 0.7       && < 1.3
+                   , aeson                    >= 0.7       && < 1.5
                    , aeson-compat             >= 0.3.2.0   && < 0.4
                    , monad-logger
                    , unordered-containers
                    , tagged
                    , path-pieces
-                   , http-api-data            >= 0.2       && < 0.4
+                   , http-api-data            >= 0.2
                    , ghc-prim
     exposed-modules: Database.Persist.TH
     ghc-options:     -Wall
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -50,14 +50,6 @@
     deriving Show Eq
 |]
 
-share [mkPersist sqlSettings { mpsGeneric = True , mpsGenerateLenses = True }] [persistLowerCase|
-Foo
-    bar Text Maybe
-    baz BazId
-Baz
-    bin Int
-|]
-
 arbitraryT :: Gen Text
 arbitraryT = pack A.<$> arbitrary
 
