hpqtypes-extras-1.16.3.0: Extra utilities for hpqtypes library
Safe HaskellSafe-Inferred
LanguageHaskell2010

Database.PostgreSQL.PQTypes.Model.Migration

Description

Using migrations is fairly easy. After you've defined the lists of migrations and tables, just run migrateDatabase:

tables :: [Table]
tables = ...

migrations :: [Migration]
migrations = ...

migrateDatabase options extensions domains tables migrations

Migrations are run strictly in the order specified in the migrations list, starting with the first migration for which the corresponding table in the DB has the version number equal to the mgrFrom field of the migration.

Synopsis

Documentation

data DropTableMode Source #

Whether to also drop objects that depend on the table.

Constructors

DropTableCascade

Automatically drop objects that depend on the table (such as views).

DropTableRestrict

Refuse to drop the table if any objects depend on it. This is the default.

data MigrationAction m Source #

Migration action to run, either an arbitrary MonadDB action, or something more fine-grained.

Constructors

StandardMigration (m ())

Standard migration, i.e. an arbitrary MonadDB action.

DropTableMigration DropTableMode

Drop table migration. Parameter is the drop table mode (RESTRICT/CASCADE). The Migration record holds the name of the table to drop.

CreateIndexConcurrentlyMigration

Migration for creating an index concurrently.

Fields

DropIndexConcurrentlyMigration

Migration for dropping an index concurrently.

Fields

forall t.FromRow t => ModifyColumnMigration (RawSQL ()) SQL ([t] -> m ()) Int

Migration for modifying columns. Parameters are:

Name of the table that the cursor is associated with. It has to be the same as in the cursor SQL, see the second parameter.

SQL that will be used for the cursor.

Function that takes a list of primary keys provided by the cursor SQL and runs an arbitrary computation within MonadDB. The function might be called repeatedly depending on the number of primary keys. See the last argument.

Number of primary keys fetched at once by the cursor SQL. To handle multi-column primary keys, the following needs to be done:

  1. Get the list of tuples from PostgreSQL.
  2. Unzip them into a tuple of lists in Haskell.
  3. Pass the lists to PostgreSQL as separate parameters and zip them back in the SQL, see https://stackoverflow.com/questions/12414750/is-there-something-like-a-zip-function-in-postgresql-that-combines-two-arrays for more details.

data Migration m Source #

Migration object.

Constructors

Migration 

Fields

  • mgrTableName :: RawSQL ()

    The name of the table you're migrating.

  • mgrFrom :: Int32

    The version you're migrating *from* (you don't specify what version you migrate TO, because version is always increased by 1, so if mgrFrom is 2, that means that after that migration is run, table version will equal 3

  • mgrAction :: MigrationAction m

    Migration action.