From ae335658a1dcb3ca7e3299f1043004cd5e10889b Mon Sep 17 00:00:00 2001 From: Lorenzo Planas Date: Wed, 30 Oct 2013 19:26:17 +0100 Subject: [PATCH 1/2] Optimize trigger triggering query after synchronizing a table --- app/models/synchronization/adapter.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/synchronization/adapter.rb b/app/models/synchronization/adapter.rb index a559e8d77a5c..bc33b5619b1f 100644 --- a/app/models/synchronization/adapter.rb +++ b/app/models/synchronization/adapter.rb @@ -55,7 +55,8 @@ def cartodbfy(table_name) table.save table.send(:invalidate_varnish_cache) puts '======= after invalidating' - database.run("UPDATE #{table.name} SET updated_at = updated_at") + database.run("UPDATE #{table.name} SET updated_at = updated_at + WHERE cartodb_id = (SELECT max(cartodb_id) FROM #{table.name})") rescue => exception stacktrace = exception.to_s + exception.backtrace.join puts stacktrace From 90e5a799d6f897a2020f322820570f7ca39c01df Mon Sep 17 00:00:00 2001 From: Lorenzo Planas Date: Wed, 30 Oct 2013 20:36:20 +0100 Subject: [PATCH 2/2] Force schema reload after synchronizing a table --- app/models/synchronization/adapter.rb | 17 +++++++++++------ app/models/table.rb | 14 +++++++++----- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/models/synchronization/adapter.rb b/app/models/synchronization/adapter.rb index bc33b5619b1f..bb7b9a1a9c39 100644 --- a/app/models/synchronization/adapter.rb +++ b/app/models/synchronization/adapter.rb @@ -42,11 +42,16 @@ def overwrite(table_name, result) def cartodbfy(table_name) table = ::Table.where(name: table_name, user_id: user.id).first - # Set default triggers - table.import_to_cartodb + #table.migrate_existing_table = table_name + table.force_schema = true + table.send :update_updated_at + table.import_to_cartodb(table_name) + table.schema(reload: true) table.import_cleanup - table.save - table.send(:set_the_geom_column!) + table.schema(reload: true) + table.reload + # Set default triggers + table.send :set_the_geom_column! table.send :update_table_pg_stats table.send :add_python table.send :set_trigger_cache_timestamp @@ -55,8 +60,8 @@ def cartodbfy(table_name) table.save table.send(:invalidate_varnish_cache) puts '======= after invalidating' - database.run("UPDATE #{table.name} SET updated_at = updated_at - WHERE cartodb_id = (SELECT max(cartodb_id) FROM #{table.name})") + database.run("UPDATE #{table.name} SET updated_at = updated_at") + #WHERE cartodb_id = (SELECT max(cartodb_id) FROM #{table.name})") rescue => exception stacktrace = exception.to_s + exception.backtrace.join puts stacktrace diff --git a/app/models/table.rb b/app/models/table.rb index 021fb0eb2d4c..b7f70b2b957f 100644 --- a/app/models/table.rb +++ b/app/models/table.rb @@ -232,15 +232,19 @@ def append_to_table(options) # => leaving both in tact while creating a new tthat contains both end - def import_to_cartodb - if migrate_existing_table.present? + def import_to_cartodb(uniname=nil) + puts "==== before migration existing table" + @data_import ||= DataImport.where(id: data_import_id).first + if migrate_existing_table.present? || uniname + puts "======= import_to_cartodb" + puts "======= import_to_cartodb" @data_import.data_type = 'external_table' - @data_import.data_source = migrate_existing_table + @data_import.data_source = migrate_existing_table || uniname #@data_import.migrate @data_import.save # ensure unique name, also ensures self.name can override any imported table name - uniname = self.name ? get_valid_name(self.name) : get_valid_name(migrate_existing_table) + uniname ||= self.name ? get_valid_name(self.name) : get_valid_name(migrate_existing_table) # with table #{uniname} table created now run migrator to CartoDBify hash_in = ::Rails::Sequel.configuration.environment_for(Rails.env).merge( @@ -248,7 +252,7 @@ def import_to_cartodb :logger => ::Rails.logger, "username" => owner.database_username, "password" => owner.database_password, - :current_name => migrate_existing_table, + :current_name => migrate_existing_table || uniname, :suggested_name => uniname, :debug => (Rails.env.development?), :remaining_quota => owner.remaining_quota,