DynamoDB Dynomite Migrations Update Table Examples

Important: These docs are for the outdated Jets 5 versions and below. For the latest Jets docs: docs.rubyonjets.com

Update Table

When update is in the name, an update_table migration is created. dynamodb/migrate/20230727232723-update_posts.rb

class UpdateProducts < Dynomite::Migration
  def up
    update_table :products do |t|
      t.add_gsi :updated_at
    end
  end
end

This is useful for adding GSI, Global Secondary Indexes. GSIs take a few minutes to add. See Wait Times

Global Secondary Index Composite Key

Here’s an example that adds an index.

class UpdateComments < Dynomite::Migration
  def up
    update_table :comments do |t|
      t.add_gsi partition_key: :post_id, sort_key: :updated_at
    end
  end
end

Multiple GSIs: Multiple Operations

You cannot create multiple GSIs within the same update_table call. But you can call update_table times in the same migration. Note: Each GSIs can take 8m+ to add.

class UpdateProducts < Dynomite::Migration
  def up
    update_table :products do |t|
      t.add_gsi partition_key: "price"
    end
    update_table :products do |t|
      t.add_gsi partition_key: "stock_quantity"
    end
    update_table :products do |t|
      t.remove_gsi partition_key: "id", sort_key: "updated_at"
    end
  end
end

Update GSI

class UpdateComments < Dynomite::Migration
  def up
    update_table :products do |t|
      t.update_gsi(
        partition_key: "id"
        provisioned_throughput: {
          read_capacity_units: 1, # required
          write_capacity_units: 1, # required
        }
      )
    end
  end
end