Class: ActiveRecord::Tasks::PostgreSQLDatabaseTasks

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/tasks/postgresql_database_tasks.rb

Overview

:nodoc:

Constant Summary collapse

DEFAULT_ENCODING =
ENV["CHARSET"] || "utf8"
ON_ERROR_STOP_1 =
"ON_ERROR_STOP=1"
SQL_COMMENT_BEGIN =
"--"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(db_config) ⇒ PostgreSQLDatabaseTasks

Returns a new instance of PostgreSQLDatabaseTasks.

[View source]

16
17
18
19
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 16

def initialize(db_config)
  @db_config = db_config
  @configuration_hash = db_config.configuration_hash
end

Class Method Details

.using_database_configurations?Boolean

Returns:

  • (Boolean)
[View source]

12
13
14
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 12

def self.using_database_configurations?
  true
end

Instance Method Details

#charsetObject

[View source]

32
33
34
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 32

def charset
  connection.encoding
end

#collationObject

[View source]

36
37
38
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 36

def collation
  connection.collation
end

#create(connection_already_established = false) ⇒ Object

[View source]

21
22
23
24
25
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 21

def create(connection_already_established = false)
  establish_connection(public_schema_config) unless connection_already_established
  connection.create_database(db_config.database, configuration_hash.merge(encoding: encoding))
  establish_connection
end

#dropObject

[View source]

27
28
29
30
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 27

def drop
  establish_connection(public_schema_config)
  connection.drop_database(db_config.database)
end

#purgeObject

[View source]

40
41
42
43
44
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 40

def purge
  ActiveRecord::Base.connection_handler.clear_active_connections!(:all)
  drop
  create true
end

#structure_dump(filename, extra_flags) ⇒ Object

[View source]

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 46

def structure_dump(filename, extra_flags)
  search_path = \
    case ActiveRecord.dump_schemas
    when :schema_search_path
      configuration_hash[:schema_search_path]
    when :all
      nil
    when String
      ActiveRecord.dump_schemas
    end

  args = ["--schema-only", "--no-privileges", "--no-owner"]
  args.concat(["--file", filename])

  args.concat(Array(extra_flags)) if extra_flags

  unless search_path.blank?
    args += search_path.split(",").map do |part|
      "--schema=#{part.strip}"
    end
  end

  ignore_tables = ActiveRecord::SchemaDumper.ignore_tables
  if ignore_tables.any?
    ignore_tables = connection.data_sources.select { |table| ignore_tables.any? { |pattern| pattern === table } }
    args += ignore_tables.flat_map { |table| ["-T", table] }
  end

  args << db_config.database
  run_cmd("pg_dump", args, "dumping")
  remove_sql_header_comments(filename)
  File.open(filename, "a") { |f| f << "SET search_path TO #{connection.schema_search_path};\n\n" }
end

#structure_load(filename, extra_flags) ⇒ Object

[View source]

80
81
82
83
84
85
# File 'lib/active_record/tasks/postgresql_database_tasks.rb', line 80

def structure_load(filename, extra_flags)
  args = ["--set", ON_ERROR_STOP_1, "--quiet", "--no-psqlrc", "--output", File::NULL, "--file", filename]
  args.concat(Array(extra_flags)) if extra_flags
  args << db_config.database
  run_cmd("psql", args, "loading")
end