2015-11-26 33 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

是的,現在它是,但可能會改變後 –