Skip to content

Commit

Permalink
using structure dump/load with clickhouse rake tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
PNixx committed Apr 1, 2020
1 parent bd226e4 commit 2ed6a4a
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
### Version 0.3.10 (Dec 20, 2019)

* Support structure dump/load
* Support structure dump/load [@StoneGod](https://github.com/StoneGod)

### Version 0.3.6 (Sep 2, 2019)

Expand Down
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,16 +107,35 @@ Migration:

Rollback migration not supported!

### Dump / Load for multiple using databases

If you using multiple databases, for example: PostgreSQL, Clickhouse.

Schema dump to `db/clickhouse_schema.rb` file:

$ rake clickhouse:schema:dump

Schema load from `db/clickhouse_schema.rb` file:

$ rake clickhouse:schema:load

We use schema for emulate development or tests environment on PostgreSQL adapter.

Structure dump to `db/clickhouse_structure.sql` file:

$ rake clickhouse:structure:dump

Structure load from `db/clickhouse_structure.sql` file:

$ rake clickhouse:structure:load

### Dump / Load for only Clickhouse database using

$ rake db:schema:dump
$ rake db:schema:load
$ rake db:structure:dump
$ rake db:structure:load

### Insert and select data

```ruby
Expand Down
6 changes: 3 additions & 3 deletions lib/clickhouse-activerecord/tasks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ def structure_dump(*args)

File.open(args.first, 'w:utf-8') do |file|
tables.each do |table|
file.puts connection.execute("SHOW CREATE TABLE #{table}")['data'].try(:first).try(:first).gsub("#{@configuration['database']}.", '')
file.puts '--- SEPARATOR'
next if table.match(/\.inner/)
file.puts connection.execute("SHOW CREATE TABLE #{table}")['data'].try(:first).try(:first).gsub("#{@configuration['database']}.", '') + ";\n\n"
end
end
end

def structure_load(*args)
File.read(args.first).split("\n--- SEPARATOR\n").each { |sql| connection.execute(sql) }
File.read(args.first).split(";\n\n").each { |sql| connection.execute(sql) }
end

def migrate
Expand Down
12 changes: 12 additions & 0 deletions lib/tasks/clickhouse.rake
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ namespace :clickhouse do

end

namespace :structure do
desc 'Load database structure'
task load: [:load_config, 'db:check_protected_environments'] do
ClickhouseActiverecord::Tasks.new(ActiveRecord::Base.configurations["#{Rails.env}_clickhouse"]).structure_load("#{Rails.root}/db/clickhouse_structure.sql")
end

desc 'Dump database structure'
task dump: [:load_config, 'db:check_protected_environments'] do
ClickhouseActiverecord::Tasks.new(ActiveRecord::Base.configurations["#{Rails.env}_clickhouse"]).structure_dump("#{Rails.root}/db/clickhouse_structure.sql")
end
end

desc 'Creates the database from DATABASE_URL or config/database.yml'
task create: [:load_config] do
ActiveRecord::Tasks::DatabaseTasks.create(ActiveRecord::Base.configurations["#{Rails.env}_clickhouse"])
Expand Down

0 comments on commit 2ed6a4a

Please sign in to comment.