编辑:我现在对出了什么问题有了更好的了解。当我在普通的旧psql中执行该查询时,会得到以下结果:
lwm@verbos
=# SELECT * FROM gerund LIMIT1;
infinitive │ gerund │ gerund_english
────────────┼─────────────┼────────────────
abandonar │ abandonando │ abandoning所以,我要拿回三根弦?然而,我说我要回来了,IO [Only String]。我敢肯定是我在这里的签名让事情变得一团糟.
我试图使用postgresql-simple库和Haskell进行一个简单的查询。我的代码和我看到的错误一起粘贴在下面。有人有什么想法吗?
我的数据库名为verbos,其中有一个名为gerund的表。我能够运行一个query_,它包含:conn "SELECT 2 + 2",并且工作正常。我还可以使用默认信息(password = 'postgres‘:psql -h localhost -p 5432 -U postgres )指定的默认数据连接到数据库(来自docs[1])
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import Control.Applicative
import Database.PostgreSQL.Simple
main = do
conn <- connect defaultConnectInfo {
connectPassword = "postgres",
connectDatabase = "verbos"
}
mapM_ print =<< (query_ conn "SELECT * FROM gerund LIMIT 1" :: IO [Only String])给出以下错误:
ConversionFailed {errSQLType =“3个值:(Basic {errSQLType= Oid 1043,typname类别= 'S',typdelim = ',',类名=\\”varchar\},Just \“errSQLType\”),(Basic {typoid = Oid 1043,类型类别= 'S',typdelim = ',',类型名称= \"varchar\"},类型名称=“abandonando\”),(基本{errSQLType= Oid 1043,类型类别= 'S',类型为',‘',类型=’varchar‘},仅仅\\“放弃\”,errSQLTableOid = Nothing,errSQLField = "",errHaskellType =“目标类型中的一个插槽”,errMessage =“要转换的列数与目标类型中的数目之间的不匹配”}
发布于 2014-11-25 04:44:47
好吧,多亏了“AlpMestanogullari”,“穆斯图短”,我在这里得到了答案。我的最后代码是:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Applicative
import Database.PostgreSQL.Simple
import Database.PostgreSQL.Simple.FromRow
data Gerund = Gerund {
f :: String,
s :: String,
t :: String
} deriving (Show)
instance FromRow Gerund where
fromRow = Gerund <$> field <*> field <*> field
main = do
conn <- connect defaultConnectInfo {
connectPassword = "postgres",
connectDatabase = "verbos"
}
mapM_ print =<< (query_ conn q :: IO [Gerund])
where q = "SELECT * FROM gerund LIMIT 1"备注:
type (f、s和Gerund类型中的t )。instance。import Database.PostgreSQL.Simple.FromRow来访问像field这样的东西。https://stackoverflow.com/questions/26952685
复制相似问题