Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
A PostgreSQL migration library
Synopsis
- data Script = Script {}
- readScripts :: FilePath -> IO [Script]
- readScript :: FilePath -> IO Script
- data ConnectionString
- connect :: ConnectionString -> Table -> IO Connection
- withLock :: Table -> Connection -> IO a -> IO a
- withTryLock :: Table -> Connection -> (Bool -> IO a) -> IO a
- data Applied = Applied {}
- data ID
- data Name
- data Content
- data Duration
- data Table
- defaultTable :: Table
- getApplied :: Table -> Connection -> IO [Applied]
- getAppliedByID :: ID -> Table -> Connection -> IO (Maybe Applied)
- merge :: [Applied] -> [Script] -> Merged
- mergeAll :: FilePath -> Table -> Connection -> IO Merged
- data Merged = Merged {
- unrecorded :: [Script]
- scriptMissing :: [Applied]
- contentMismatch :: [ContentMismatch]
- unapplied :: [Script]
- data ContentMismatch = ContentMismatch {}
- canApply :: Merged -> Bool
- converged :: Merged -> Bool
- apply :: Script -> Connection -> IO Applied
- record :: Applied -> Table -> Connection -> IO ()
- applyAll :: Merged -> Table -> Connection -> IO ()
- data Connection
- withTransaction :: Connection -> IO a -> IO a
Documentation
A migration script. Most users would get them by running readScripts
,
but those wanting a more fine-grained control would use readScript
.
readScripts :: FilePath -> IO [Script] Source #
Read migration Script
s from a directory. It only tries to read paths
ending with the .sql extension and doesn't recurse into subdirectories.
Note: the directory must exist
readScript :: FilePath -> IO Script Source #
Read migration Script
s from a file. Useful when you need a more fine-grained
control over which paths are read then what readScripts
provides.
data ConnectionString Source #
PostgreSQL connection string. (This is a newtype over ByteString
)
for syntax, see: https://hackage.haskell.org/package/postgresql-simple/docs/Database-PostgreSQL-Simple.html#v:connectPostgreSQL
Instances
ToJSON ConnectionString Source # | |
Defined in Relocant.DB toJSON :: ConnectionString -> Value # toEncoding :: ConnectionString -> Encoding # toJSONList :: [ConnectionString] -> Value # toEncodingList :: [ConnectionString] -> Encoding # | |
IsString ConnectionString Source # | |
Defined in Relocant.DB fromString :: String -> ConnectionString # | |
Show ConnectionString Source # | |
Defined in Relocant.DB showsPrec :: Int -> ConnectionString -> ShowS # show :: ConnectionString -> String # showList :: [ConnectionString] -> ShowS # | |
Eq ConnectionString Source # | |
Defined in Relocant.DB (==) :: ConnectionString -> ConnectionString -> Bool # (/=) :: ConnectionString -> ConnectionString -> Bool # |
connect :: ConnectionString -> Table -> IO Connection Source #
Connect to the DB using the given ConnectionString
and
initialize the migrations table.
Note: If you get your Connection
from elsewhere,
remember to call init
yourself.
withLock :: Table -> Connection -> IO a -> IO a Source #
Use pg_advisory_{lock,unlock} to restrict access to the migrations table. The given table is used to generate the lock's ID, so that in the unlikely case where you have multiple migrations tables in your database you can lock them separately.
withTryLock :: Table -> Connection -> (Bool -> IO a) -> IO a Source #
An applied migration. Generally, it's created be either running a
migration Script
with apply
or getting the records
from the DB with getApplied
or getAppliedByID
.
Migration ID
.
Instances
ToJSON ID Source # | |
Defined in Relocant.ID | |
IsString ID Source # | |
Defined in Relocant.ID fromString :: String -> ID # | |
Show ID Source # | |
PrintfArg ID Source # | |
Defined in Relocant.ID formatArg :: ID -> FieldFormatter # parseFormat :: ID -> ModifierParser # | |
Eq ID Source # | |
Ord ID Source # | |
FromField ID Source # | |
Defined in Relocant.ID fromField :: FieldParser ID # | |
ToField ID Source # | |
Defined in Relocant.ID |
Migration Name
.
Instances
ToJSON Name Source # | |
Defined in Relocant.Name | |
IsString Name Source # | |
Defined in Relocant.Name fromString :: String -> Name # | |
Show Name Source # | |
PrintfArg Name Source # | |
Defined in Relocant.Name formatArg :: Name -> FieldFormatter # parseFormat :: Name -> ModifierParser # | |
Eq Name Source # | |
FromField Name Source # | |
Defined in Relocant.Name | |
ToField Name Source # | |
Defined in Relocant.Name |
Migration content and its checksum.
Instances
ToJSON Duration Source # | |
Defined in Relocant.Duration | |
Monoid Duration Source # | |
Semigroup Duration Source # | |
Show Duration Source # | |
PrintfArg Duration Source # | |
Defined in Relocant.Duration formatArg :: Duration -> FieldFormatter # parseFormat :: Duration -> ModifierParser # | |
Eq Duration Source # | |
FromField Duration Source # | |
Defined in Relocant.Duration | |
ToField Duration Source # | |
Defined in Relocant.Duration |
relocant's migration table name.
defaultTable :: Table Source #
The default table name, which is "public.relocant_migration".
getApplied :: Table -> Connection -> IO [Applied] Source #
Retrieve all Applied
migrations' records from the DB.
getAppliedByID :: ID -> Table -> Connection -> IO (Maybe Applied) Source #
Retrieve the specific Applied
migration's record from the DB.
merge :: [Applied] -> [Script] -> Merged Source #
Merge scripts and applied migrations, trying to discover inconsistencies and/or migration scripts to apply.
mergeAll :: FilePath -> Table -> Connection -> IO Merged Source #
A convenience function that gets all applied migrations' records from the DB and merges them together with the migration scripts from a given directory.
Merged | |
|
data ContentMismatch Source #
The applied migration and its purported script differ in content.
Instances
ToJSON ContentMismatch Source # | |
Defined in Relocant.Merge toJSON :: ContentMismatch -> Value # toEncoding :: ContentMismatch -> Encoding # toJSONList :: [ContentMismatch] -> Value # toEncodingList :: [ContentMismatch] -> Encoding # | |
Show ContentMismatch Source # | |
Defined in Relocant.Merge showsPrec :: Int -> ContentMismatch -> ShowS # show :: ContentMismatch -> String # showList :: [ContentMismatch] -> ShowS # | |
Eq ContentMismatch Source # | |
Defined in Relocant.Merge (==) :: ContentMismatch -> ContentMismatch -> Bool # (/=) :: ContentMismatch -> ContentMismatch -> Bool # |
converged :: Merged -> Bool Source #
No problems have been discovered after the merge, and there are no migration scripts to apply.
applyAll :: Merged -> Table -> Connection -> IO () Source #
A convenience function that applies all unapplied migrations' scripts and records their application in the DB. Each script is run in a separate transaction.
Re-exports (postgresql-simple)
data Connection #
Instances
Eq Connection | |
Defined in Database.PostgreSQL.Simple.Internal (==) :: Connection -> Connection -> Bool # (/=) :: Connection -> Connection -> Bool # |
withTransaction :: Connection -> IO a -> IO a #
Execute an action inside a SQL transaction.
This function initiates a transaction with a "begin
transaction
" statement, then executes the supplied action. If
the action succeeds, the transaction will be completed with
commit
before this function returns.
If the action throws any kind of exception (not just a
PostgreSQL-related exception), the transaction will be rolled back using
rollback
, then the exception will be rethrown.
For nesting transactions, see withSavepoint
.