class NixAdm::PostgreSQL::Export

This class exports an entire PostgreSQL database cluster to $backup_dir/db, including the relevant global settings.

Example:

export = Export.new('db', { :debug => true })
export.run()

Attributes

filesystems[RW]
targets[RW]

Public Class Methods

new(host, options = {}) click to toggle source
Calls superclass method NixAdm::Backup::new
# File src/lib/nixadm/db/postgresql.rb, line 81
def initialize(host, options = {})
  super host, options: options

  @ssh_opts = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
end

Public Instance Methods

backup_databases() click to toggle source

This does a pg_dump of all databases in plaintext format. It gzips them all.

# File src/lib/nixadm/db/postgresql.rb, line 108
def backup_databases()
  cd backup_dir('db')

  # List of databases on server
  databases = listDatabases()

  # List of databases to exclude
  exclude =
  {
    'template0' => true,
    'template1' => true
  }

  # Backup individual databases
  databases.each do |db|
    next if exclude.has_key?(db)

    begin
      log "Dumping: #{db}"
      store @host, "pg_dump -p 5433 #{db}", "#{db}.db"
    rescue
      puts $!
      log "Failed #{@host} #{db}: #{$?.to_s}", 1
      next
    end
  end

  # Dump the globals
  globals_file = 'globals.sql'
  log "Dumping globals to #{globals_file}"
  store @host, 'pg_dumpall -g -p 5433', globals_file
end
log(msg, code=0) click to toggle source
# File src/lib/nixadm/db/postgresql.rb, line 87
def log(msg, code=0)
  $stderr.puts msg
end
run() click to toggle source
# File src/lib/nixadm/db/postgresql.rb, line 95
def run()
  begin
    backup_databases()
  rescue Exception => ex
    log "Backup failed: #{ex.to_s}\n #{ex.backtrace}"
  end
end

Protected Instance Methods

listDatabases() click to toggle source
# File src/lib/nixadm/db/postgresql.rb, line 143
def listDatabases()
  command = %Q{ psql -At -p 5433 postgres -c 'select datname from pg_database' }
  pipeline = resolveCommand(command)

  dbs = []
  exec([pipeline]) do |line|
    dbs << line.strip
  end

  return dbs
end