Rivet

0.12.0

Rivet is a database migration/change management/versioning tool inspired by Ruby on Rails' Migrations. It creates and applies migration scripts for SQL Server databases. Migration scripts describe changes to make to your database, e.g. add a table, add a column, remove an index, etc. Migrations scripts should get added to your version control system so they can be pac
Rivet is a database migration/change management/versioning tool inspired by Ruby on Rails' Migrations. It creates and applies migration scripts for SQL Server databases. Migration scripts describe changes to make to your database, e.g. add a table, add a column, remove an index, etc. Migrations scripts should get added to your version control system so they can be packaged and deployed with your application's code.

Minimum PowerShell version

5.1

Installation Options

Copy and Paste the following command to install this package using PowerShellGet More Info

Install-Module -Name Rivet

You can deploy this package directly to Azure Automation. Note that deploying packages with dependencies will deloy all the dependencies to Azure Automation. Learn More

Manually download the .nupkg file to your system's default download location. Note that the file won't be unpacked, and won't include any dependencies. Learn More

Author(s)

WebMD Health Services

Copyright

Copyright 2013 - 2019 WebMD Health Services.

Owners

Tags

sql-server evolutionary-database database migrations

Cmdlets

Add-Index

Functions

Add-CheckConstraint Add-DataType Add-DefaultConstraint Add-Description Add-ExtendedProperty Add-ForeignKey Add-PrimaryKey Add-Row Add-RowGuidCol Add-Schema Add-StoredProcedure Add-Synonym Add-Table Add-Trigger Add-UniqueKey Add-UserDefinedFunction Add-View Disable-Constraint Enable-Constraint Export-Migration Get-Migration Get-RivetConfig Import-RivetPlugin Invoke-Ddl Invoke-Rivet Invoke-RivetPlugin Invoke-SqlScript Merge-Migration New-BigIntColumn New-BinaryColumn New-BitColumn New-CharColumn New-Column New-DateColumn New-DateTime2Column New-DateTimeColumn New-DateTimeOffsetColumn New-DecimalColumn New-FloatColumn New-HierarchyIDColumn New-IntColumn New-Migration New-MoneyColumn New-NCharColumn New-NVarCharColumn New-RealColumn New-RowVersionColumn New-SmallDateTimeColumn New-SmallIntColumn New-SmallMoneyColumn New-SqlVariantColumn New-TimeColumn New-TinyIntColumn New-UniqueIdentifierColumn New-VarBinaryColumn New-VarCharColumn New-XmlColumn Remove-CheckConstraint Remove-DataType Remove-DefaultConstraint Remove-Description Remove-ExtendedProperty Remove-ForeignKey Remove-Index Remove-PrimaryKey Remove-Row Remove-RowGuidCol Remove-Schema Remove-StoredProcedure Remove-Synonym Remove-Table Remove-Trigger Remove-UniqueKey Remove-UserDefinedFunction Remove-View Rename-Column Rename-DataType Rename-Index Rename-Object Stop-Migration Update-CodeObjectMetadata Update-Description Update-ExtendedProperty Update-Row Update-StoredProcedure Update-Table Update-Trigger Update-UserDefinedFunction Update-View

PSEditions

Desktop Core

Dependencies

This module has no dependencies.

Release Notes

## Upgrade Instructions

This version of Rivet is backwards-incompatible. It changes the way plug-ins work. In order to upgrade to this version, you'll need to update your plugins and your rivet.json file.

1. Package your plugins into a PowerShell module. Make sure your plug-in functions are exported by your module.
2. Add the attribute `[Rivet.Plugin([Rivet.Event]::BeforeOperationLoad)]` to any existing `Start-MigrationOperation` functions.
3. Add the attribute `[Rivet.Plugin([Rivet.Event]::AfterOperationLoad)]` to any existing `Complete-MigrationOperation` functions.
4. Change the `PluginsRoot` setting in your rivet.json file to `PluginPaths`. Change its value to the path to the module you created in step 1. Rivet will import the module into the global scope for you. Or, if you want to import the module, set the `PluginModules` property to a list of module names that contain the plug-ins to use.

See `about_Rivet_Plugins` for more information.

## Changes

* Created `Export-Migration` function for exporting database objects as Rivet migrations.
* Rivet can now add XML columns that don't have schema associated with them.
* `New-Column` can now be used to create columns on tables that have custom size specifications, are rowguidcol, are identities, custom collations, and are file stream.
* Fixed: `Merge-Migration` doesn't merge `Add-RowGuidCol` and `Remove-RowGuidCol` operations into `Add-Table`/`Update-Table` operations.
* ***Breaking Change***: Rivet plug-ins must now be packaged as/in PowerShell modules. The `PluginsRoot` configuration option has been renamed to `PluginPaths` and should be a list of paths were Rivet can find the PowerShell modules containing your plug-ins. These paths are imported using the `Import-Module` command. See `about_Rivet_Plugins` for more information.
* The `PluginsPath` (fka `PluginsRoot`) configuration setting is now allowed to have wildcards.
* Completely re-architected how `Merge-Migration` merges migrations together. This fixed a lot of bugs where many operations were not merging correctly.
* The Convert-Migration.ps1 sample script no longer include a header for all migrations that affected an operation, since Rivet no longer exposes this information. Instead, it only adds an author header for the migration an operation ends up in.
* The `Remove-DefaultConstraint` operation's `ColumnName` parameter is now required. When merging operations, Rivet needs to know what column a default expression operates on. You'll get a warning if it isn't provided. In a future version of Rivet, this parameter will be made mandatory.
* Default constraint names are now required. You must pass a constraint name to the Add-DefaultConstraint operator's Name parameter and to the DefaultConstraintName parameter on any column definition that has a default value.
* Performance improvement: Rivet now only queries once for the state of all applied migrations instead of querying for every migration.
* Performance improvement: Rivet only reads migration files that haven't been applied to a database. This should help with backwards-compatability. If Rivet's API changes only migrations you want to push/pop will need to get updated to match the new API.
* Unique key constraint names are now required. You must pass a constraint name to the Add-UniqueKey operation's Name parameter.
* Primary key constraint names are now required. You must pass a constraint name to the Add-PrimaryKey operation's Name parameter.
* Foreign key constraint names are now required. You must pass a constraint name to the Add-ForeignKey operation's Name parameter.
* Index names are now required. You must pass an index name to the Add-Index operation's Name parameter.
* Fixed: Get-Migration and Get-MigrationFile don't properly exclude migrations in some situations.
* Fixed: the idempotent queries for renaming a data type and index don't work.

Version History

Version Downloads Last updated
0.12.0 (current version) 23 5/5/2020
0.12.0-beta239 2 5/5/2020
0.12.0-beta236 5 5/1/2020
0.12.0-beta233 8 4/27/2020
0.12.0-beta218 10 4/17/2020
0.9.1 10 3/27/2020
0.9.0 69 11/27/2018
0.8.1 238 11/26/2016