From 9c695533733e59bc83fc6175a6fc9288936db54e Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Thu, 25 Jun 2015 12:15:00 -0400 Subject: [PATCH] Verifies PostgreSQL version is supported (+9.2) before spawning server [fixes #157] --- src/PostgREST/Main.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/PostgREST/Main.hs b/src/PostgREST/Main.hs index 22fa11dde..58cd0ea07 100644 --- a/src/PostgREST/Main.hs +++ b/src/PostgREST/Main.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE QuasiQuotes, ScopedTypeVariables #-} module Main where import Paths_postgrest (version) @@ -17,12 +18,18 @@ import Network.Wai.Middleware.Static (staticPolicy, only) import Network.Wai.Middleware.RequestLogger (logStdout) import Data.List (intercalate) import Data.Version (versionBranch) +import Data.Functor.Identity +import Data.Text(Text) import qualified Hasql as H import qualified Hasql.Postgres as P import Options.Applicative hiding (columns) 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 = do let opts = info (helper <*> argParser) $ @@ -61,6 +68,9 @@ main = do pool :: H.Pool P.Postgres <- 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 body <- strictRequestBody req resOrError <- liftIO $ H.session pool $ H.tx Nothing $