FIX: Restore failed if schema contained objects not owned by the current DB user

FIX: Restore failed if schema contained objects not owned by the current DB user

diff --git a/lib/backup_restore.rb b/lib/backup_restore.rb
index 4775fdd..4d75734 100644
--- a/lib/backup_restore.rb
+++ b/lib/backup_restore.rb
@@ -83,12 +83,14 @@ module BackupRestore
   end
 
   def self.move_tables_between_schemas(source, destination)
+    owner = database_configuration.username
+
     ActiveRecord::Base.transaction do
-      DB.exec(move_tables_between_schemas_sql(source, destination))
+      DB.exec(move_tables_between_schemas_sql(source, destination, owner))
     end
   end
 
-  def self.move_tables_between_schemas_sql(source, destination)
+  def self.move_tables_between_schemas_sql(source, destination, owner)
     <<~SQL
       DO $$DECLARE row record;
       BEGIN
@@ -97,13 +99,13 @@ module BackupRestore
         -- otherwise extensions (like hstore & pg_trgm) won't work anymore...
         CREATE SCHEMA IF NOT EXISTS #{destination};
         -- move all <source> tables to <destination> schema
-        FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = '#{source}'
+        FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = '#{source}'  AND tableowner = '#{owner}'
         LOOP
           EXECUTE 'DROP TABLE IF EXISTS #{destination}.' || quote_ident(row.tablename) || ' CASCADE;';
           EXECUTE 'ALTER TABLE #{source}.' || quote_ident(row.tablename) || ' SET SCHEMA #{destination};';
         END LOOP;
         -- move all <source> views to <destination> schema
-        FOR row IN SELECT viewname FROM pg_views WHERE schemaname = '#{source}'
+        FOR row IN SELECT viewname FROM pg_views WHERE schemaname = '#{source}' AND viewowner = '#{owner}'
         LOOP
           EXECUTE 'DROP VIEW IF EXISTS #{destination}.' || quote_ident(row.viewname) || ' CASCADE;';
           EXECUTE 'ALTER VIEW #{source}.' || quote_ident(row.viewname) || ' SET SCHEMA #{destination};';
diff --git a/lib/backup_restore/backuper.rb b/lib/backup_restore/backuper.rb
index ae7cee8..dd4f81c 100644
--- a/lib/backup_restore/backuper.rb
+++ b/lib/backup_restore/backuper.rb
@@ -194,6 +194,7 @@ module BackupRestore
       [ password_argument,            # pass the password to pg_dump (if any)
         "pg_dump",                    # the pg_dump command
         "--schema=public",            # only public schema
+        "-T public.pg_*",             # exclude tables and views whose name starts with "pg_"
         "--file='#{@dump_filename}'", # output to the dump.sql file
         "--no-owner",                 # do not output commands to set ownership of objects
         "--no-privileges",            # prevent dumping of access privileges

GitHub sha: 13b4eb9c

This commit appears in #9324 which was approved by eviltrout. It was merged by gschlager.