$ sqitch config --user user.name 'Diethard Steiner'
Let’s add some more config options: Define the default db so that we don’t have to type it all the time:
$ sqitch config core.pg.db_name dwh
Let's also make sure that changes are verified after deploying them:
$ sqitch config --bool deploy.verify true
$ sqitch config --bool rebase.verify true
Check details:
cat ~/.sqitch/sqitch.conf
Have a look at the plan file. The plan file defines the execution order of the changes:
$ cat sqitch.plan
$ git add .
$ git commit -am 'Initialize Sqitch configuration.'
Add your first sql script/change:
$ sqitch add create_stg_schema -n 'Add schema for all staging objects.'
Created deploy/create_stg_schema.sql
Created revert/create_stg_schema.sql
Created verify/create_stg_schema.sql
As you can see, Sqitch creates deploy, revert a verify files for you.
$ vi deploy/create_stg_schema.sql
Add:
CREATE SCHEMA staging;
Make sure you remove the default BEGIN; COMMIT; for this as we are just creating a schema and don’t require any transaction.
$ vi revert/create_stg_schema.sql
Add:
DROP SCHEMA staging;
$ vi verify/create_stg_schema.sql
Add:
SELECT pg_catalog.has_schema_privilege('staging', 'usage');
This is quite PostgreSQL specific. For other dbs use something like this:
SELECT 1/COUNT(*) FROM information_schema.schemata WHERE schema_name = 'staging';
Now test if you can deploy the script and revert it:
Try to deploy the changes:
The general command looks like this:
$ sqitch -d <dbname> deploy
As we have already specified a default db in the config file, we only have to run the following:
$ sqitch deploy
Adding metadata tables to dwh
Deploying changes to dwh
+ create_stg_schema .. ok
Note the plus sign in the feedback which means this change was added.
When you run deploy for the very first time, Sqitch will create maintenance tables in a dedicated schema automatically for you. These tables will (among other things) store in which “version” the DB is.
Check the current deployment status of database dwh:
$ sqitch -d dwh status
# On database dwh
# Project: yes
# Change: bc9068f7af60eb159e2f8cc632f84d7a93c6fca5
# Name: create_stg_schema
# Deployed: 2013-08-07 13:01:33 +0100
# By: Diethard Steiner <diethard.steiner@>
To verify the changes run:
$ sqitch -d dwh verify
Verifying dwh
* create_stg_schema .. ok
Verify successful
To revert the changes the the previous state, run:
$ sqitch revert --to @HEAD^ -y
Side note
You can use @HEAD^^ to revert to two changes prior the last deployed change.
To revert everything:
$ sqitch revert
Revert all changes from dwh? [Yes] Yes
- create_stg_schema .. ok
To revert back to a specific script (you can also revert back to a specific tag):
$ sqitch revert create_dma_schema
Revert changes to create_dma_schema from dwh? [Yes]
Let’s inspect the log:
$ sqitch log
Note that the actions we took are shown in reverse chronological order, with the revert first and then the deploy.
Now let's commit it.
$ git add .
$ git commit -m 'Added staging schema.'
Now that we have successfully deployed and reverted the current change, let’s deploy again:
$ sqitch deploy
Let’s add a tag:
$ sqitch tag v1.0.0-dev1 -n 'Tag v1.0.0-dev1.'
Deployment to target DBs
So if you want to deploy these changes to your prod DB in example, you can either do it like this:
$ sqitch -d <dbname> -u <user> -h <host> -p <port> deploy
(Important: If you are working with PostgreSQL, make sure you add your password to ~/.pgpass and then comment the password out in sqitch.conf beforehand otherwise this will not work.)
Or bundle them up, copy the bundle to your prod server and deploy it there:
$ sqitch bundle
Distribute the bundle
On the prod server:
$ cd bundle
$ sqitch -d dwhprod deploy
A future version of Sqitch will have better support for target DBs (see here).