2016-04-14 22 views
1

içinde saat dilimi ile zaman damgası alma Bu sorunun, past before'da yükseltildiğini biliyorum ve şimdi çözümlendi olarak işaretlendi.Postgresql-simple

Data.Time ile birlikte postgresql-simple paketini kullanıyorum. Tek bir sütun türü timestamptz almak için bir sorgu yaparsam, desen eşleme hatası alırım. Aşağıdaki Sözde kod: sorguları çalıştırırken ben çalışma anında bu hatayı alıyorum

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)) 
... 

(yukarıda unutmayın:

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

aşağıda gibi geçersiz bir türe yukarıda değiştirirseniz:

012: beklenen türü aslında timestamptz olduğunu gösterir
[Pg.Only (i::T.Text)] <- Pg.query conn "select lastupdated from constraints where name=?" (Only ("carrier"::T.Text)) 

Ben türü hakkında istisna olsun

Ayrıca, bu yukarıdaki sorgu sonucu psql konsolunda görünür:

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

Benim anlayış Data.Time.UTCTime veya Database.PostgreSQL.Simple.Time.UTCTimestampPostgreSQL ait timestamptz tipine haritasına gerektiğidir. Görünüşe göre, bu hataları yukarıdaki hatalardan alırsam yanlış olur. Bu konuda yardımcı olacak.

cevap

2

yerine bu deneyin:

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

Sizin desen eşleşmesi, yalnızca Only UTCTime s'lik bir listesi var olacağını zorlama değildi, ama aynı zamanda listede tam olarak bir unsuru olacağını. İki kaydınız olduğu için, query iki öğeli bir liste döndürecek ve desen eşleşmesi başarısız olacaktır.

+0

Çalıştı, teşekkürler! – Sal