Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 6bca27b

Browse files
author
Brian Butz
committed
Rake task: rake db:dev:dump_schema
Just a utility task to get a dump of the database schema similar to what you'd see from ActiveRecord
1 parent f6ae02d commit 6bca27b

3 files changed

Lines changed: 30 additions & 4 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ spec/examples.txt
1212
ci-artifacts-dir
1313
ci-working-dir
1414
coverage
15+
db/schema.rb
1516
doc
1617
*.rbc
1718
*.swp

lib/tasks/db.rake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,29 @@ namespace :db do
207207
number_to_rollback = (args[:number_to_rollback] || 1).to_i
208208
for_each_database { rollback(number_to_rollback) }
209209
end
210+
211+
desc 'Dump schema to file'
212+
task :dump_schema do
213+
require_relative '../../spec/support/bootstrap/db_config'
214+
require_relative '../../spec/support/bootstrap/table_recreator'
215+
216+
db = DbConfig.new.connection
217+
218+
puts 'Recreating tables...'
219+
TableRecreator.new(db).recreate_tables(without_fake_tables: true)
220+
221+
db.extension(:schema_dumper)
222+
puts 'Dumping schema...'
223+
schema = db.dump_schema_migration(indexes: true, foreign_keys: true)
224+
225+
File.open('db/schema.rb', 'w') { |f|
226+
f.write("# rubocop:disable all\n")
227+
f.write(schema)
228+
f.write("# rubocop:enable all\n")
229+
}
230+
231+
puts 'Wrote db/schema.rb'
232+
end
210233
end
211234

212235
namespace :parallel do

spec/support/bootstrap/table_recreator.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'support/bootstrap/fake_model_tables'
1+
require_relative 'fake_model_tables'
22

33
class TableRecreator
44
SAFE_VIEWS = [:pg_stat_statements].freeze
@@ -7,7 +7,7 @@ def initialize(db)
77
@db = db
88
end
99

10-
def recreate_tables
10+
def recreate_tables(without_fake_tables: false)
1111
prepare_database
1212

1313
(db.views - SAFE_VIEWS).each do |view|
@@ -20,8 +20,10 @@ def recreate_tables
2020

2121
DBMigrator.new(db).apply_migrations
2222

23-
fake_model_tables = FakeModelTables.new(db)
24-
fake_model_tables.create_tables
23+
unless without_fake_tables
24+
fake_model_tables = FakeModelTables.new(db)
25+
fake_model_tables.create_tables
26+
end
2527
end
2628

2729
private

0 commit comments

Comments
 (0)