2015-11-26 5 views
1

Я список, как ["0", "s", "a"], который генерируется в процессе оценки, что список должен быть вставлен в PostgreSQL с postgresql-simple, где первый столбец bigint, но когда я используюPostgreSQL гетерогенной вставки

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

У меня есть ошибка с неправильным преобразованием типов

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

Как я могу сделать библиотеку понятой, что первое значение является int?

ответ

1

Если у вас есть три столбца с типами Int, String, String, то вы не можете представить ряд этой схемы с [String], вы должны использовать (Int, String, String). Если вы меняете vals на этот тип, он должен работать.

Конечно, это означает, что ваш способ генерации vals также необходимо изменить, так как map evalVal fields имеет смысл только в том случае, если все поля одного типа. Но детали этого зависят от того, что делает evalVal.

+0

К сожалению, размер списка изменяется при вычислении. Я использую общие функции, когда это возможно 3, 4, 5, ... элементы в списке. Я попытался преобразовать список в кортеж с TemplateHaskell, но мы не можем генерировать квази-цитату во время выполнения, поэтому мне еще нужно знать размер заранее –

+0

Всегда ли это первый столбец, который является 'Int', а остальные всегда 'String's? – Cactus

+0

Да, на данный момент это возможно, но может измениться позже –

Смежные вопросы