From 8fe10e642ad9b5d236d2b00cea475bdc519130c0 Mon Sep 17 00:00:00 2001
From: Jacob Vosmaer <contact@jacobvosmaer.nl>
Date: Wed, 26 Feb 2014 18:26:31 +0100
Subject: [PATCH] Empty the database during Postgres backup restore

The expected behavior during a GitLab backup restore is to overwrite
existing database data. This works for MySQL because the output of
mysqldump contains 'DROP TABLE IF EXISTS' statements. pg_dump on the
other hand assumes that one will restore into an empty database. When
this is not the case, during the restore with psql some of the data will
be skipped if existing data is 'in the way'. By first invoking `rake
db:schema:load` during a Postgres GitLab backup restore, we make sure
that all important data is correctly restored.
---
 lib/backup/database.rb | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/backup/database.rb b/lib/backup/database.rb
index ebb4f289c52..6552f45ff0b 100644
--- a/lib/backup/database.rb
+++ b/lib/backup/database.rb
@@ -29,6 +29,8 @@ module Backup
         print "Restoring MySQL database #{config['database']} ... "
         system('mysql', *mysql_args, config['database'], in: db_file_name)
       when "postgresql" then
+        puts "Destructively rebuilding database schema for RAILS_ENV #{Rails.env}"
+        Rake::Task["db:schema:load"].invoke
         print "Restoring PostgreSQL database #{config['database']} ... "
         pg_env
         system('psql', config['database'], '-f', db_file_name)
-- 
GitLab