From 2ed6a4a2951992336083c0b73438cb281b45ccee Mon Sep 17 00:00:00 2001 From: nixx Date: Wed, 1 Apr 2020 13:10:56 +0300 Subject: [PATCH] using structure dump/load with clickhouse rake tasks --- CHANGELOG.md | 2 +- README.md | 21 ++++++++++++++++++++- lib/clickhouse-activerecord/tasks.rb | 6 +++--- lib/tasks/clickhouse.rake | 12 ++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c23b5723..7fdd3d2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/README.md b/README.md index 52663ebd..3f2b8d21 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,10 @@ 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 @@ -114,9 +118,24 @@ Schema dump to `db/clickhouse_schema.rb` file: 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 diff --git a/lib/clickhouse-activerecord/tasks.rb b/lib/clickhouse-activerecord/tasks.rb index 075a0406..cb05f506 100644 --- a/lib/clickhouse-activerecord/tasks.rb +++ b/lib/clickhouse-activerecord/tasks.rb @@ -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 diff --git a/lib/tasks/clickhouse.rake b/lib/tasks/clickhouse.rake index b7ee5b9d..26ac7396 100644 --- a/lib/tasks/clickhouse.rake +++ b/lib/tasks/clickhouse.rake @@ -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"])