2016-04-14 5 views
1

この問題はpast beforeで発生し、解決済みとマークされています。Postgresql-simpleでタイムゾーン付きタイムスタンプを取得する

Data.Timeと一緒にpostgresql-simpleパッケージを使用しています。 timestamptzという1つの列を取得するためのクエリを実行すると、パターンマッチエラーが発生します。下記の擬似コード:

import Data.Text as T 
import Data.Time (UTCTime,LocalTime,ZonedTime) 
import Database.PostgreSQL.Simple as Pg 
import Database.PostgreSQL.Simple.FromRow 
import Database.PostgreSQL.Simple.ToRow 
import Database.PostgreSQL.Simple.ToField 
import Database.PostgreSQL.Simple.Time 
import qualified Data.Vector as V 
... 
--- in main this is the code 
[Pg.Only (i::UTCTime)] <- Pg.query conn "select lastupdated from constraints where name=?" (Only ("carrier"::T.Text)) 
... 

クエリを実行するとき、私は(上記に注意してください、実行時にこのエラーが出る:

*** Exception: user error (Pattern match failure in do expression at ...) 

を、私は以下のような無効な型に上記変更した場合:

012:期待されるタイプは確かに timestamptzであることを示している
[Pg.Only (i::T.Text)] <- Pg.query conn "select lastupdated from constraints where name=?" (Only ("carrier"::T.Text)) 

私はタイプについての例外を取得

また、これは、上記のクエリの結果はpsqlコンソールでどのように見えるかです:

  lastupdated   
------------------------------- 
2016-04-13 00:08:33.789761+00 
2016-04-13 14:33:38.27739+00 
(2 rows) 

私の理解では、Data.Time.UTCTimeまたはDatabase.PostgreSQL.Simple.Time.UTCTimestampPostgreSQLtimestamptz型にマップする必要があることです。明らかに、私が上記のエラーを受けている場合、その理解は間違っています。これで助けに感謝します。

答えて

2

代わりにこれを試してみてください:

(times :: [Pg.Only UTCTime]) <- 
    Pg.query conn "select lastupdated from constraints where name=?" (Only ("carrier" :: T.Text)) 

あなたのパターンマッチはOnly UTCTime秒のリストがあるだろうということが、また、リスト内で正確に一つの要素があるだろうと強制されただけではなく。 2つのレコードがあるので、queryは2つの要素を持つリストを返し、パターンマッチは失敗します。

+0

ありがとう! – Sal

関連する問題