2012-10-06 29 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。)