postgresql-simple
은 스트리밍 쿼리 용 기능을 제공합니다.postgresql-simple을 사용하여 스트리밍 도관 소스 만들기
fold
:: (FromRow row, ToRow params)
=> Connection -> Query -> params -> a -> (a -> row -> IO a) -> IO a
스트리밍을 최대한 활용하는 콘딧 소스를 만들고 싶습니다. IO
이 fold
에서 (내가 생각하세요?)를 contravariant 위치에 나타나기 때문에
mySource :: (FromRow row, Monad m) => Source m row
불행하게도, 정말 종류와 사투를 벌인거야. 다음은 유형을 확인하지만 값을 산출하기 전에 전체 스트림을 폴드합니다.
getConduit :: Connection -> IO (C.ConduitM() Event IO())
getConduit conn = fold_ conn queryEventRecord CL.sourceNull foo
where
foo :: C.ConduitM() Event IO() -> Event -> IO (C.ConduitM() Event IO())
foo cond evt = pure (cond >> C.yield evt)
이것을 구현하는 방법에 대한 모든 의견을 매우 높이 평가할 것입니다. 감사! 마지막으로 만들기 위해 stm-conduit
를 사용
, 우리는 [PostgreSQL을-libpq를 (https://www.stackage.org/package/postgresql-libpq)이 동작을 구현하는 아래로 떨어졌다. postgresql-simple이 (TMChan 접근법 @Alec 언급과 함께)이 작업을 수행 할 수 있는지 확신하지 못합니다. –
함수가있는'pipes-postgresql-simple'이 있습니다, ['query'] (https://hackage.haskell.org/package/pipes-postgresql-simple-0.1.2.0/docs/Pipes-PostgreSQL-Simple .html # v : query); [produceIO'] (https://github.com/ocharles/pipes-postgresql-simple/blob)의 구현에서 알 수 있듯이 기본적으로 @Alec이 언급 한 전략 ('pipes-concurrency'으로 구현 됨)을 사용하고 있습니다. /master/src/Pipes/PostgreSQL/Simple.hs#L117) – Michael