2012-10-06 31 views
1

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

当我尝试获取这样的值,有一个例外

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

有没有办法做到这一点不诉诸低级别PostgreSQL相关的libpq?

回答

0

我不知道什么关于haskell,但是,你应该能够只查询查询中的值。如:

select your_money_field::text from your_table; 

再说一遍,我不知道你是如何查询......如果你正使用某种ORM,那么你可能无法做到这一点。

2

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

您可以做的是定义一种代表金钱的类型(例如文本的新类型),然后定义一个提供适当转换的实例。规范转换将首先检查类型,然后检查数据是否为空,最后尝试执行转换。由于money是由postgresql提供的内置类型,因此它具有稳定的OID类型,并且为了进行类型检查,您只需使用typeOID函数。

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

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

(对不起,对于最近的回复,我通常不会访问Stack Overflow。)