Sha256: 6417ae29849900d5fcab930e059c60373f4c0cca032c995e9bc7224a7b06ef4e

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

class RenameTrafficSchema < Landable::Migration
  def traffic_schema
    "#{Landable.configuration.database_schema_prefix}landable_traffic"
  end

  def schema_exists(schema)
    execute("SELECT COUNT(*) FROM pg_namespace WHERE nspname = '#{schema}'")[0]['count'] == '1'
  end

  def move_objects(from_schema, to_schema, relkind, object_type)
    # move objects from public to new schema
    objects = select_all("
      SELECT o.relname
        FROM pg_class o
        JOIN pg_namespace n
        ON n.oid=o.relnamespace
        AND n.nspname = '#{from_schema}'
        AND o.relkind = '#{relkind}'
        ORDER BY o.relname
    ")

    objects.each do |object|
      sql = %(
        ALTER #{object_type} #{from_schema}.#{object['relname']}
          SET SCHEMA #{to_schema}
            )
      puts "Moving #{from_schema}.#{object['relname']} TO #{to_schema}"
      execute sql
    end
  end

  def up
    return unless schema_exists('traffic')
    execute("CREATE SCHEMA #{traffic_schema}")
    move_objects('traffic', "#{traffic_schema}", 'r', 'TABLE')
    move_objects('traffic', "#{traffic_schema}", 'S', 'SEQUENCE')
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
landable-1.14.0 db/migrate/20140224205516_rename_traffic_schema.rb
landable-1.13.2 db/migrate/20140224205516_rename_traffic_schema.rb