diff --git a/CHANGELOG b/CHANGELOG
index d538bb42992f6e745fd46bf0286e956b695d23cf..170cb81bcce89e4c633681a9a8e36a2a70b676bc 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 9ab6aca276da7a274b464b404efafc62878c7605..7aa54dd55aecfa3bede76cc93e51809ecce067fd 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 e9cf0a9b5e862cc16d1b886ecac14ff424d8807c..0000000000000000000000000000000000000000
--- 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 a66030ab93a9e96f3cc1ac6cb3fc7447d36b4a8f..0000000000000000000000000000000000000000
--- 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