diff --git a/.configuration.sh b/.configuration.sh new file mode 100644 index 0000000..0b02d83 --- /dev/null +++ b/.configuration.sh @@ -0,0 +1,3 @@ +#!/bin/bash +export $PSQL_OPTS= +export $DB_NAME= diff --git a/README.md b/README.md index c38d15d..19dcdc3 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,53 @@ [Startup Engineering - Roll your own Database Migrations](http://ian-shafer.github.io/2016/02/02/db-migrations/) -### Required table +## Setup + +#### Configuration +All configuration needed is done in .configuration.sh. +Note that a +[.pgpass](http://www.postgresql.org/docs/9.3/static/libpq-pgpass.html) file will +do most of the times as well and therefore configuration is not mandatory. + +#### Migration files +The files in the /migrations directory are changes to the scheme, not the full +scheme. + +The naming convention for migration files are: +- 000.000 +- 000.001 +- 000.002 +- 000.003 +- 000.004 +- ...and so on + +**Example** +The first file, `migration/000.000` may look like this: +``` +create table users ( + name varchar(32) not null, + primary key (name) +); +``` + +The second file, `migration/000.001` may look like this: +``` +alter table users +add email varchar(256) not null; +``` + +#### Prerequisites +One table needs to be created for the database to make this work: ``` -create table database_versions ( +CREATE TABLE database_versions ( version varchar(32) not null, is_active boolean not null default false, creation_date timestamp not null default current_timestamp ); ``` + +To do the actual migration, then just run: +``` +# ./db-upgrade +``` diff --git a/db-upgrade b/db-upgrade index 7984d4d..f74c824 100755 --- a/db-upgrade +++ b/db-upgrade @@ -1,6 +1,6 @@ #!/bin/bash set -e -# source $(dirname $0)/../.include +source .configuration.sh function add-version() { psql $PSQL_OPTS -c "update database_versions set is_active = false where is_active = true" $DB_NAME @@ -16,4 +16,4 @@ for f in $(ls -1 migrations/*.sql | sort); do # No need to check return code because of the 'set -e' add-version $filev fi -done \ No newline at end of file +done