diff options
author | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-07-07 16:34:06 +0300 |
---|---|---|
committer | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-07-07 16:34:06 +0300 |
commit | 90ab5a59bb28053c9da768679b8036caa7885e95 (patch) | |
tree | 165b67480476630a8d799a740b88bb2850c7d795 | |
parent | 17446ff0c98e870f0500279983432e5115e060a4 (diff) |
Use native Postgres database cleaning during backup restore
We were using hacks to drop tables etc during a Postgres backup
restore. With this change, we let pg_dump insert the DROP TABLE
statements it needs at the start of the SQL dump.
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | lib/backup/database.rb | 7 | ||||
-rw-r--r-- | lib/tasks/gitlab/db/drop_all_postgres_sequences.rake | 10 | ||||
-rw-r--r-- | lib/tasks/gitlab/db/drop_all_tables.rake | 10 |
4 files changed, 3 insertions, 25 deletions
diff --git a/CHANGELOG b/CHANGELOG index d538bb42992..170cb81bcce 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -37,6 +37,7 @@ v 7.13.0 (unreleased) - Correctly show anonymous authorized applications under Profile > Applications. - Query Optimization in MySQL. - Allow users to be blocked and unblocked via the API + - Use native Postgres database cleaning during backup restore v 7.12.2 - Correctly show anonymous authorized applications under Profile > Applications. diff --git a/lib/backup/database.rb b/lib/backup/database.rb index 9ab6aca276d..7aa54dd55ae 100644 --- a/lib/backup/database.rb +++ b/lib/backup/database.rb @@ -18,7 +18,8 @@ module Backup when "postgresql" then $progress.print "Dumping PostgreSQL database #{config['database']} ... " pg_env - system('pg_dump', config['database'], out: db_file_name) + # Pass '--clean' to include 'DROP TABLE' statements in the DB dump. + system('pg_dump', '--clean', config['database'], out: db_file_name) end report_success(success) abort 'Backup failed' unless success @@ -31,10 +32,6 @@ module Backup system('mysql', *mysql_args, config['database'], in: db_file_name) when "postgresql" then $progress.print "Restoring PostgreSQL database #{config['database']} ... " - # Drop all tables because PostgreSQL DB dumps do not contain DROP TABLE - # statements like MySQL. - Rake::Task["gitlab:db:drop_all_tables"].invoke - Rake::Task["gitlab:db:drop_all_postgres_sequences"].invoke pg_env system('psql', config['database'], '-f', db_file_name) end diff --git a/lib/tasks/gitlab/db/drop_all_postgres_sequences.rake b/lib/tasks/gitlab/db/drop_all_postgres_sequences.rake deleted file mode 100644 index e9cf0a9b5e8..00000000000 --- a/lib/tasks/gitlab/db/drop_all_postgres_sequences.rake +++ /dev/null @@ -1,10 +0,0 @@ -namespace :gitlab do - namespace :db do - task drop_all_postgres_sequences: :environment do - connection = ActiveRecord::Base.connection - connection.execute("SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';").each do |sequence| - connection.execute("DROP SEQUENCE #{sequence['relname']}") - end - end - end -end diff --git a/lib/tasks/gitlab/db/drop_all_tables.rake b/lib/tasks/gitlab/db/drop_all_tables.rake deleted file mode 100644 index a66030ab93a..00000000000 --- a/lib/tasks/gitlab/db/drop_all_tables.rake +++ /dev/null @@ -1,10 +0,0 @@ -namespace :gitlab do - namespace :db do - task drop_all_tables: :environment do - connection = ActiveRecord::Base.connection - connection.tables.each do |table| - connection.drop_table(table) - end - end - end -end |