No commit activity in last 3 years
No release in over 3 years
Simple schema migrator for AWS Redshift (and PostgreSQL)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 0.18
>= 0
 Project Readme

RedshiftSimpleMigrator

Build Status

this gem is super simple migrator for AWS Redshift (and PostgreSQL).

Installation

Add this line to your application's Gemfile:

gem 'redshift_simple_migrator'

And then execute:

$ bundle

Or install it yourself as:

$ gem install redshift_simple_migrator

Usage

Define migration

Migration definition is like ActiveRecord::Migration, but this gem supports only execute method. It has no other migration dsl.

Migration File

class CreateKpiMiddleTable < RedshiftSimpleMigrator::Migration
  def up
    execute <<-SQL
      CREATE TABLE company_users DISTKEY (id) AS
      SELECT
        a.id,
        a.company_id
      FROM
        users a
          INNER JOIN companies b ON a.company_id = b.id;
    SQL
  end

  def down
    execute <<-SQL
      DROP TABLE company_users;
    SQL
  end
end

File name convention

File name convention is same with ActiveRecord::Migration.

% ls redshift/migrate/
001_create_kpi_middle_table.rb

Command

# Show current migration version
$ redshift_simple_migrator version -c <config.yml>

# List execute migrations
$ redshift_simple_migrator list <TARGET_VERSION> -c <config.yml> -p <migrations_path>

# Execute migration
$ redshift_simple_migrator migrate <TARGET_VERSION> -c <config.yml> -p <migrations_path>

If you use with rails, config is autoloaded from config/redshift_simple_migrator.yml, and define Rake tasks.

Rake tasks

rake redshift:migrate                   # Migrate the AWS Redshift (options: VERSION=x)
rake redshift:migrate:status            # Display status of AWS Redshift migration (options: VERSION=x)

config.yml example

default: &default
  host: hogehoge.redshift.amazonaws.com
  port: 5439
  dbname: sample
  user: admin
  password: password
  connect_timeout: 30000
  schema_migrations_table_name: redshift_schema_migrations

development:
  <<: *default

If schema_migrations_table_name table doesn't exist, this gem creates the table automatically.

schema_migrations table schema is following.

CREATE TABLE <schema_migrations_table_name> (version text NOT NULL)

TODO

  • Refine migrations_path config.
  • Write test codes.

If you want to change target environment, set REDSHIFT_ENV environment variable. For example, REDSHIFT_ENV=prouduction redshift_simple_migrator migrate -c config.yml -p db/migrate

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake false to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment. Run bundle exec redshift_simple_migrator to use the gem in this directory, ignoring other installed copies of this gem.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/joker1007/redshift_simple_migrator.