Sha256: 529b420ad3a40cc8c6df56eb04dfa2db14ef1b60c51b7368c994863f2e6cc69a

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module EY
  module Backup
    class Postgresql < Engine
      register 'postgresql'

      def dump(database_name, basename)
        file = basename + '.dump'

        command = "PGPASSWORD='#{password}' pg_dump -h #{host} --format=c --no-owner --no-privileges -Upostgres #{database_name}"

        if gpg?
          command << " | " << GPGEncryptor.command_for(key_id)
          file << GPGEncryptor.extension
        end

        command << " > #{file}"

        run(command)

        file
      end

      def load(database_name, file)
        if database_exists?(database_name)
          cycle_database(database_name)
        else
          create_database(database_name)
        end

        command = "cat #{file}"

        if gpg?
          raise "Cannot load a GPG backup"
        end

        command << " | PGPASSWORD='#{password}' pg_restore -h #{host} --format=c --ignore-version -Upostgres -d #{database_name}"

        run(command)
      end

      def database_exists?(database_name)
        runs?("PGPASSWORD='#{password}' psql -l -h #{host} | grep '#{database_name}'")
      end

      def drop_database(database_name)
        spawn("PGPASSWORD='#{password}' dropdb -h #{host} -U#{username} #{database_name}")
      end

      def create_database(database_name)
        spawn("PGPASSWORD='#{password}' createdb -U#{username} -h #{host} #{database_name}")
      end

      def cycle_database(database_name)
        drop_database(database_name)
        create_database(database_name)
      end

      def suffix
        /\.(dump|gpz)$/
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ey_cloud_server-1.4.28 lib/ey_backup/engines/postgresql_engine.rb
ey_cloud_server-1.4.28.pre lib/ey_backup/engines/postgresql_engine.rb