错误是
*** Exception: Incompatible {errsqlType = "int8",errHaskellType = "Int",errMessage = "types incompatible"}
看起来查询中count(*)返回的任何值都必须转换为Integer而不是Int.如果我将这些特定变量更改为Integer类型,则查询可以正常工作.
但是在具有相同确切代码的另一台机器上没有引发此错误.第一台机器是32位,另一台机器是64位.这是我能辨别的唯一区别.
有没有人对正在发生的事情有任何见解?
Postgresql count()函数返回一个Bigint类型,参见
原文链接:/postgresql/452766.htmlhttp://www.postgresql.org/docs/9.2/static/functions-aggregate.html
Bigint是8个字节
见http://www.postgresql.org/docs/9.2/static/datatype-numeric.html
Haskell int是~2 ** 29,这意味着它是一个4字节的整数.
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Int.html
然后它的正常情况是Postgresql或其API不会进行精确的隐式向下转换.
因此,使用Haskell int64类型或转换计数(*)为整数.