如何使用 postgresql simple (Haskell) 插入数组?
How to insert array using postgresql simple (Haskell)?
我正在使用 Scotty 和 PostgreSQL-simple 开发 Haskell API。我不知道如何插入包含文本数组的列。到目前为止,我的查询已经奏效,但是关于这个的一些东西似乎编译得不好。
这是我的:
addOrder :: Postgres r m => OrderIntent -> m ()
addOrder param =
void . withConn $ \conn -> execute conn qry (orderIntentTable param, orderIntentItemsSlug param)
where
qry = "insert into orders (table, items, created_at, updated_at) values (?, ?, now(), now())"
我的 OrderIntent 及其 FromRow 是:
data OrderIntent = OrderIntent
{ orderIntentTable :: Integer
, orderIntentItemsSlug :: [Text]
} deriving(Eq, Show)
instance FromRow OrderIntent where
fromRow = OrderIntent
<$> field
<*> (fromPGArray <$> field)
我得到的错误是:
• Could not deduce (Database.PostgreSQL.Simple.ToField.ToField
[Data.Text.Internal.Text])
arising from a use of ‘execute’
from the context: Postgres r m
bound by the type signature for:
addOrder :: forall r (m :: * -> *).
Postgres r m =>
OrderIntent -> m ()
at Core/Order/DAO.hs:11:1-47
我不知道如何使用 PostgreSQL 库来解析文本数组,以便将 i 插入到数据库中。如果你们中有人能帮助我,我将不胜感激!
PS:我也有 几天前的,如果你碰巧知道 Scotty auth。
在插入 orderIntentItemsSlug
时,您需要 orderIntentItemsSlug
的 ToField
实例(即 [Text]
)。
这就是你的错误告诉你的。
我建议查看其他 ToField
instances 的来源以弄清楚你想怎么做(一个 hacky 方法是先把你的字段变成 Text
,它已经加气了ToField
个实例)。
您也可以写一个订单 table,一次将 orderID
关联到一个项目,这样您就根本不需要写任何实例了。
使用PGArray
.
execute conn qry (orderIntentTable param, PGArray (orderIntentItemsSlug param))
我正在使用 Scotty 和 PostgreSQL-simple 开发 Haskell API。我不知道如何插入包含文本数组的列。到目前为止,我的查询已经奏效,但是关于这个的一些东西似乎编译得不好。
这是我的:
addOrder :: Postgres r m => OrderIntent -> m ()
addOrder param =
void . withConn $ \conn -> execute conn qry (orderIntentTable param, orderIntentItemsSlug param)
where
qry = "insert into orders (table, items, created_at, updated_at) values (?, ?, now(), now())"
我的 OrderIntent 及其 FromRow 是:
data OrderIntent = OrderIntent
{ orderIntentTable :: Integer
, orderIntentItemsSlug :: [Text]
} deriving(Eq, Show)
instance FromRow OrderIntent where
fromRow = OrderIntent
<$> field
<*> (fromPGArray <$> field)
我得到的错误是:
• Could not deduce (Database.PostgreSQL.Simple.ToField.ToField
[Data.Text.Internal.Text])
arising from a use of ‘execute’
from the context: Postgres r m
bound by the type signature for:
addOrder :: forall r (m :: * -> *).
Postgres r m =>
OrderIntent -> m ()
at Core/Order/DAO.hs:11:1-47
我不知道如何使用 PostgreSQL 库来解析文本数组,以便将 i 插入到数据库中。如果你们中有人能帮助我,我将不胜感激!
PS:我也有
在插入 orderIntentItemsSlug
时,您需要 orderIntentItemsSlug
的 ToField
实例(即 [Text]
)。
这就是你的错误告诉你的。
我建议查看其他 ToField
instances 的来源以弄清楚你想怎么做(一个 hacky 方法是先把你的字段变成 Text
,它已经加气了ToField
个实例)。
您也可以写一个订单 table,一次将 orderID
关联到一个项目,这样您就根本不需要写任何实例了。
使用PGArray
.
execute conn qry (orderIntentTable param, PGArray (orderIntentItemsSlug param))