Merge pull request #219 from diogob/check_postgresql_version
Verifies PostgreSQL version is supported (+9.2) before spawning server
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
{-# LANGUAGE QuasiQuotes, ScopedTypeVariables #-}
|
||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
import Paths_postgrest (version)
|
import Paths_postgrest (version)
|
||||||
@@ -17,12 +18,18 @@ import Network.Wai.Middleware.Static (staticPolicy, only)
|
|||||||
import Network.Wai.Middleware.RequestLogger (logStdout)
|
import Network.Wai.Middleware.RequestLogger (logStdout)
|
||||||
import Data.List (intercalate)
|
import Data.List (intercalate)
|
||||||
import Data.Version (versionBranch)
|
import Data.Version (versionBranch)
|
||||||
|
import Data.Functor.Identity
|
||||||
|
import Data.Text(Text)
|
||||||
import qualified Hasql as H
|
import qualified Hasql as H
|
||||||
import qualified Hasql.Postgres as P
|
import qualified Hasql.Postgres as P
|
||||||
import Options.Applicative hiding (columns)
|
import Options.Applicative hiding (columns)
|
||||||
|
|
||||||
import PostgREST.Config (AppConfig(..), argParser, corsPolicy)
|
import PostgREST.Config (AppConfig(..), argParser, corsPolicy)
|
||||||
|
|
||||||
|
isServerVersionSupported = do
|
||||||
|
Identity (row :: Text) <- H.tx Nothing $ H.singleEx $ [H.stmt|SHOW server_version_num|]
|
||||||
|
return $ read (cs row) >= 90200
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
let opts = info (helper <*> argParser) $
|
let opts = info (helper <*> argParser) $
|
||||||
@@ -61,6 +68,9 @@ main = do
|
|||||||
pool :: H.Pool P.Postgres
|
pool :: H.Pool P.Postgres
|
||||||
<- H.acquirePool pgSettings poolSettings
|
<- H.acquirePool pgSettings poolSettings
|
||||||
|
|
||||||
|
resOrError <- H.session pool isServerVersionSupported
|
||||||
|
either (fail . show) (\supported -> unless supported $ fail "Cannot run in this PostgreSQL version, PostgREST needs at least 9.2.0") resOrError
|
||||||
|
|
||||||
runSettings appSettings $ middle $ \req respond -> do
|
runSettings appSettings $ middle $ \req respond -> do
|
||||||
body <- strictRequestBody req
|
body <- strictRequestBody req
|
||||||
resOrError <- liftIO $ H.session pool $ H.tx Nothing $
|
resOrError <- liftIO $ H.session pool $ H.tx Nothing $
|
||||||
|
|||||||
Reference in New Issue
Block a user