Database Loader

Load SQL views, materialized views, grants, etc. into database.

For tables, use Rails migrations.

Currently it works only with oracle_enahanced adapter.

Installation

Include the gem in your Gemfile:

gem "database_loader"

In Rails 2.x you also need to add this to you Rakefile

require "database_loader/tasks"

Structure

rails_app/
  db/
    migrate/
    sql/
      local/
        views/
          report_v.sql
      ext/
        packages/
          sync_api.sql
        views/
          users_v.sql
        materialized_views/
        indexes/
        functions/
        scripts/
        grants/

Load generated SQL into database

rake db:sql:load:local
rake db:sql:load:ext

Preview generated SQL

rake db:sql:dump:local
rake db:sql:dump:ext

Packaging a new release

In case you cannot directly access your external database, you can generate a package containing all your SQL files and send it to DBA.

rake db:sql:package:local NAME="v1"
rake db:sql:package:ext NAME="v1"

Configuration

config/initializers/database_loader.rb

# Types that contain SQL files.
DatabaseLoader.types = [ :views, :materialized_views, :indexes, :packages, :functions, :scripts, :grants ]

# Use :erb, :erubis or :liquid to render SQL files.
DatabaseLoader.template_engine = :erb

# Path to store generated tar packages.
DatabaseLoader.package_path = "/tmp"

# Path to SH template that will be used to generate deployement script (see examples/template.sh)
DatabaseLoader.template_path = Rails.root.join("db", "sql", "template.sh")

Setting up database connections

Convention is to create additional configurations for each environment and append the external schema name.

config/database.yml

development:
  username: local
  password: ...

development_ext:
  username: external
  password: ...

TODO

  • SQL dependency handling.