1

我想使用一些特定于数据库的数据类型,如money、point、inet 等。可以将它们作为字符串插入。但是,我找不到如何获取它们的示例,因为它们不在传递给 FromField.mkCompats 函数的列表中。

当我尝试获取这样的值时,出现异常

*** Exception: Incompatible {errSQLType = "money", errHaskellType = "Text", errMessage = "types incompatible"}

有没有办法不使用低级 postgresql-libpq 来做到这一点?

4

2 回答 2

2

是的,postgresql-simple 可以做到这一点!但是,以前没有很好的记录。查看FromField 模块中的示例代码。

您可以做的是定义一个表示 Money 的类型(例如 Text 的新类型),然后定义一个FromField提供适当转换的实例。规范转换将首先检查类型,然后检查数据是否不为空,最后尝试执行转换。由于 money 是 postgresql 本身提供的内置类型,它具有稳定的类型 OID,并且出于类型检查的目的,您需要做的就是使用该typeOID函数。

如果类型由 postgresql 的扩展提供,则类型 OID 可能因数据库而异。在这种情况下,我建议使用该typename函数来获取不变的字符串。

不幸的是,(还没有?)可以从其他 postgresql 类型向现有FromField实例添加转换。

(抱歉回复晚了,我通常不访问 Stack Overflow。)

于 2013-07-10T13:25:00.320 回答
0

我对haskell一无所知,但是,您应该能够只对查询中的值进行类型转换。如:

 select your_money_field::text from your_table;

同样,我不知道您是如何查询的……如果您使用的是某种 ORM,那么您可能无法做到这一点。

于 2012-10-07T15:16:02.687 回答