我想使用一些数据库特定的数据类型,如money,point,inet等。可以将它们作为字符串插入。但是,我找不到如何获取它们的示例,因为它们不在传递给FromField.mkCompats函数的列表中。
当我尝试获取这样的值时,出现了一个异常
*** Exception: Incompatible {errSQLType = "money", errHaskellType = "Text", errMessage = "types incompatible"}
有没有办法做到这一点,而不是求助于低级的postgresql-libpq?
发布于 2013-07-10 21:25:00
是的,postgresql-simple可以做到这一点!然而,以前并没有很好的文档记录。查看FromField module中的示例代码。
您可以做的是定义一个表示货币的类型(例如,文本的新类型),然后定义一个提供适当转换的FromField
实例。规范转换将首先检查类型,然后检查数据是否不为空,最后尝试执行转换。因为money是postgresql本身提供的一个内置类型,所以它有一个稳定的类型OID,为了检查类型,你只需要使用typeOID
函数。
如果类型是由postgresql的扩展提供的,则类型OID可能因数据库而异。在这种情况下,我建议使用typename
函数来获取不变的字符串。
不幸的是,它还不是(还没有?)可以从额外的postgresql类型向现有的FromField
实例添加转换。
(很抱歉回复晚了,我通常不会访问Stack Overflow。)
发布于 2012-10-07 23:16:03
我对haskell一无所知,但是,您应该能够只对查询中的值进行类型转换。例如:
select your_money_field::text from your_table;
再说一次,我不知道你是如何查询的。如果您正在使用某种ORM,那么您可能无法做到这一点。
https://stackoverflow.com/questions/12760633
复制相似问题