首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgresql-简单查询错误

postgresql-简单查询错误
EN

Stack Overflow用户
提问于 2014-11-16 01:07:23
回答 1查看 934关注 0票数 0

编辑:我现在对出了什么问题有了更好的了解。当我在普通的旧psql中执行该查询时,会得到以下结果:

代码语言:javascript
复制
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])

代码语言:javascript
复制
{-# 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 =“要转换的列数与目标类型中的数目之间的不匹配”}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-25 04:44:47

好吧,多亏了“AlpMestanogullari”,“穆斯图短”,我在这里得到了答案。我的最后代码是:

代码语言:javascript
复制
{-# 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 (fsGerund类型中的t )。
  • 我密切关注FromRow的docs[FromRow],以定义FromRow和instance
  • 您需要导入import Database.PostgreSQL.Simple.FromRow来访问像field这样的东西。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26952685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档