2015-11-26 62 views
1

我已列表等["0", "s", "a"]其在评估的过程中产生的,当我使用PostgreSQL的异构插入

let vals = map evalVal field :: [String] 
execute conn query vals 

该列表应的PostgreSQL与postgresql-simple其中第一列是bigint,但被插入我有错误与错误的类型转换

Incompatible {errSQLType = "int4", errSQLTableOid = Just (Oid 25340), 

我该如何让图书馆了解第一个值是int?

回答

1

如果你有类型IntStringString三列,那么你就不能代表该模式的一排[String],你必须使用(Int, String, String)。如果将vals更改为此类型,则应该可以工作。

当然,这意味着您的生成方式vals也需要更改,因为map evalVal fields只有在字段都是相同类型时才有意义。但是这个细节取决于evalVal的功能。

+0

不幸的是,列表大小在计算过程中是可以改变的。我在列表中使用泛型函数时,它可能是3,4,5,...元素。我尝试使用TemplateHaskell将列表转换为元组,但是我们在执行期间不能生成准引号,因此我需要事先知道大小 –

+0

是否总是第一列是“Int”,其余总是'String's? – Cactus

+0

是的,现在它是,但可能会改变后 –