module MultiTenant::MigrationExtensions

Public Instance Methods

citus_version() click to toggle source
# File lib/activerecord-multi-tenant/migrations.rb, line 30
def citus_version
  execute("SELECT extversion FROM pg_extension WHERE extname = 'citus'").getvalue(0,0).try(:split, '-').try(:first)
rescue ArgumentError => e
  raise unless e.message == "invalid tuple number 0"
end
create_distributed_table(table_name, partition_key) click to toggle source
# File lib/activerecord-multi-tenant/migrations.rb, line 3
def create_distributed_table(table_name, partition_key)
  return unless citus_version.present?
  execute "SELECT create_distributed_table($$#{table_name}$$, $$#{partition_key}$$)"
end
create_reference_table(table_name) click to toggle source
# File lib/activerecord-multi-tenant/migrations.rb, line 8
def create_reference_table(table_name)
  return unless citus_version.present?
  execute "SELECT create_reference_table($$#{table_name}$$)"
end
enable_extension_on_all_nodes(extension) click to toggle source
# File lib/activerecord-multi-tenant/migrations.rb, line 26
def enable_extension_on_all_nodes(extension)
  execute_on_all_nodes "CREATE EXTENSION IF NOT EXISTS \"#{extension}\""
end
execute_on_all_nodes(sql) click to toggle source
# File lib/activerecord-multi-tenant/migrations.rb, line 13
def execute_on_all_nodes(sql)
  execute sql

  case citus_version
  when '6.0'
    execute "SELECT citus_run_on_all_workers($$#{sql}$$)" # initial citus_tools.sql with different names
  when nil
    # Do nothing, this is regular Postgres
  else # 6.1 and newer
    execute "SELECT run_command_on_workers($$#{sql}$$)"
  end
end