diff --git a/persistent-postgresql/ChangeLog.md b/persistent-postgresql/ChangeLog.md index 8f5cf5cd8..efa5b0084 100644 --- a/persistent-postgresql/ChangeLog.md +++ b/persistent-postgresql/ChangeLog.md @@ -1,3 +1,7 @@ +## 2.6.3 + +* Added new function `migrateEnableExtension`, to enable Postgres extensions in migrations. + ## 2.6.2.2 * Because `text` and `varchar` are synonyms in Postgresql, don't attempt to migrate between them. [#762](https://github.com/yesodweb/persistent/pull/762) diff --git a/persistent-postgresql/Database/Persist/Postgresql.hs b/persistent-postgresql/Database/Persist/Postgresql.hs index 1809746c9..e5467314e 100644 --- a/persistent-postgresql/Database/Persist/Postgresql.hs +++ b/persistent-postgresql/Database/Persist/Postgresql.hs @@ -4,6 +4,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE ViewPatterns #-} @@ -26,6 +27,7 @@ module Database.Persist.Postgresql , tableName , fieldName , mockMigration + , migrateEnableExtension ) where import Database.Persist.Sql @@ -74,7 +76,7 @@ import Data.Aeson import Data.Aeson.Types (modifyFailure) import Control.Monad (forM) import Control.Monad.Trans.Reader (runReaderT) -import Control.Monad.Trans.Writer (runWriterT) +import Control.Monad.Trans.Writer (WriterT(..), runWriterT) import Data.Acquire (Acquire, mkAcquire, with) import System.Environment (getEnvironment) import Data.Int (Int64) @@ -1185,3 +1187,13 @@ mockMigration mig = do result = runReaderT $ runWriterT $ runWriterT mig resp <- result sqlbackend mapM_ T.putStrLn $ map snd $ snd resp + +-- | Enable a Postgres extension. See https://www.postgresql.org/docs/10/static/contrib.html +-- for a list. +migrateEnableExtension :: Text -> Migration +migrateEnableExtension extName = WriterT $ WriterT $ do + res :: [Single Int] <- + rawSql "SELECT COUNT(*) FROM pg_catalog.pg_extension WHERE extname = ?" [PersistText extName] + if res == [Single 0] + then return (((), []) , [(False, "CREATe EXTENSION \"" <> extName <> "\"")]) + else return (((), []), []) diff --git a/persistent-postgresql/persistent-postgresql.cabal b/persistent-postgresql/persistent-postgresql.cabal index 8754227a6..696edc67d 100644 --- a/persistent-postgresql/persistent-postgresql.cabal +++ b/persistent-postgresql/persistent-postgresql.cabal @@ -1,5 +1,5 @@ name: persistent-postgresql -version: 2.6.2.2 +version: 2.6.3 license: MIT license-file: LICENSE author: Felipe Lessa, Michael Snoyman