module EDB::DBMS::PostgreSQL

Public Class Methods

backup(dir_name) click to toggle source
# File lib/edb/dbms/postgresql.rb, line 29
def backup(dir_name)
  db    = ::EDB.opts[:DBMS][:PostgreSQL]
  files = {
    dump: File.join(dir_name, "#{db[:database]}.sql")
  }

  ::EDB::Logger.log(:info, "Dumping #{db[:database]}...")

  only_tables    = (db[:only_tables]    || []).reject(&:empty?).map { |t| "-t #{t}" }.join(' ')
  exclude_tables = (db[:exclude_tables] || []).reject(&:empty?).map { |t| "-T #{t}" }.join(' ')

  pg_dump = db[:binpath] && !db[:binpath].empty? ? File.join(db[:binpath], 'pg_dump') : 'pg_dump'
  Kernel.system "PGPASSWORD='#{db[:password]}' #{pg_dump} -h #{db[:host]} -p #{db[:port]} -U #{db[:username]} -F c -b -f '#{files[:dump]}' #{only_tables} #{exclude_tables} #{db[:database]}"

  if db[:include_cluster] == true
    ::EDB::Logger.log(:info, 'Dumping the cluster...')

    files[:cluster] = File.join(dir_name, 'cluster.sql')
    pg_dumpall = db[:binpath] && !db[:binpath].empty? ? File.join(db[:binpath], 'pg_dumpall') : 'pg_dumpall'
    Kernel.system "PGPASSWORD='#{db[:password]}' #{pg_dumpall} -h #{db[:host]} -p #{db[:port]} -U #{db[:username]} -f '#{files[:cluster]}'"
  end

  if db[:run_sql_after_backup] && File.exists?(db[:run_sql_after_backup])
    ::EDB::Logger.log(:info, "Executing #{File.basename(db[:run_sql_after_backup])}...")

    psql = db[:binpath] && !db[:binpath].empty? ? File.join(db[:binpath], 'psql') : 'psql'
    Kernel.system "PGPASSWORD='#{db[:password]}' #{psql} -h #{db[:host]} -p #{db[:port]} -U #{db[:username]} -d #{db[:database]} -f #{db[:run_sql_after_backup]}"
  end

  files.values
end