Explains how to write Rivet migrations.
You can use the following special variables in your Push-Migration
and
Pop-Migration
functions:
$DBScriptRoot
: the path to the script root directory of the database you're
migrating.The following functions are available for managing tables:
The Add-(DataType)Column
's Column
parameter is a script block that should
return columns as column objects, e.g.,
Add-Table Customer {
Int 'ID' -Identity
NVarChar 'Name' -NotNull
Int 'ZipCode' -NotNull
}
The following functions will remove objects of the specified type. Use the
IfExists
flag to only delete the object if it exists.
Stored procedures, user-defined functions, views and other database objects are
usually stored in external script files, which are executed against the database
to create/update the object. In some cases, it can take a long time to run all
your code object scripts, so it can be useful to included updated/new scripts in a
migration. Rivet assumes scripts for object types are stored under
$DBScriptRoot
in directories with the following names:
Under these directories, scripts should be stored per-object in files named after
the object. For example, if you have stored procedure InsertIntoFoo
, it should
be saved in $DBScriptRoot\Stored Procedures\InsertIntoFoo.sql
. If your script
is in a schema other than dbo
, the file's name should be prefixed with the
schema. For example, if your stored procedure InsertIntoFoo
is in the bar
schema, it should be saved in $DBScriptRoot\Stored
Procedures\bar.InsertIntoFoo.sql
.
Use these functions to run the script for a code object:
Set-StoredProcedure -Name <string> [-Schema <string>]
Set-UserDefinedFunction -Name <string> [-Schema <string>]
Set-View -Name <string> [-Schema <string>]
To execute an arbitrary SQL script, use Invoke-SqlScript:
Invoke-SqlScript -Path <string>
If the Path
argument is a relative path, the full path to the SQL script is
resolved from the directory of the migration script. For example, if your
database's migrations directory is
C:\Projects\Rivet\Databases\RivetTest\Migrations
, this path:
Invoke-SqlScript -Path ..\Miscellaneous\CreateDesertedIsland.sql
would resolve to
C:\Projects\Rivet\Databases\RivetTest\Miscellaneous\CreatedDesertedIsland.sql
.
When none of the functions above will do the trick, use the Invoke-Query
function to execute raw SQL:
Invoke-Query -Query <string>
You can use a PowerShell here string for longer queries and so you don't have to escape quotes:
Invoke-Query -Query @'
-- SQL goes here. You don't have to escape single quotes.
'@ # '@ must be the first two characters on the line to close the string.