Class: PgHaMigrations::AbstractPartmanRenameAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/pg_ha_migrations/partman_rename_adapter.rb

Instance Method Summary collapse

Constructor Details

#initialize(part_config) ⇒ AbstractPartmanRenameAdapter

Returns a new instance of AbstractPartmanRenameAdapter.



3
4
5
6
7
8
9
# File 'lib/pg_ha_migrations/partman_rename_adapter.rb', line 3

def initialize(part_config)
  if part_config.datetime_string != source_datetime_string
    raise PgHaMigrations::InvalidPartmanConfigError,
      "Expected datetime_string to be #{source_datetime_string.inspect} " \
      "but received #{part_config.datetime_string.inspect}"
  end
end

Instance Method Details

#alter_table_sql(partitions) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/pg_ha_migrations/partman_rename_adapter.rb', line 11

def alter_table_sql(partitions)
  sql = partitions.filter_map do |partition|
    next if partition.name =~ /\A.+_default\z/

    if partition.name !~ source_name_suffix_pattern
      raise PgHaMigrations::InvalidIdentifierError,
        "Expected #{partition.name.inspect} to match #{source_name_suffix_pattern.inspect}"
    end

    begin
      "ALTER TABLE #{partition.fully_qualified_name} RENAME TO #{target_table_name(partition.name)};"
    rescue Date::Error
      raise PgHaMigrations::InvalidIdentifierError,
        "Expected #{partition.name.inspect} suffix to be a parseable DateTime"
    end
  end.join("\n")

  # This wraps the SQL in an anonymous function such that
  # the statement timeout would apply to the entire batch of
  # statements instead of each individual statement
  "DO $$ BEGIN #{sql} END; $$;"
end

#source_datetime_stringObject



38
39
40
# File 'lib/pg_ha_migrations/partman_rename_adapter.rb', line 38

def source_datetime_string
  raise "#{__method__} should be implemented in subclass"
end

#source_name_suffix_patternObject



42
43
44
# File 'lib/pg_ha_migrations/partman_rename_adapter.rb', line 42

def source_name_suffix_pattern
  raise "#{__method__} should be implemented in subclass"
end

#target_datetime_stringObject



46
47
48
# File 'lib/pg_ha_migrations/partman_rename_adapter.rb', line 46

def target_datetime_string
  raise "#{__method__} should be implemented in subclass"
end

#target_table_name(table_name) ⇒ Object



34
35
36
# File 'lib/pg_ha_migrations/partman_rename_adapter.rb', line 34

def target_table_name(table_name)
  raise "#{__method__} should be implemented in subclass"
end