diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 32d645728a..1dfa0420ea 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -2934,13 +2934,13 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) /* * DATABASE and DATABASE PROPERTIES also have a special rule: they are - * restored in createDB mode or restored format is not plain file, and not - * restored otherwise, independently of all else. + * restored in createDB mode, and not restored otherwise, independently of + * all else. */ if (strcmp(te->desc, "DATABASE") == 0 || strcmp(te->desc, "DATABASE PROPERTIES") == 0) { - if (ropt->createDB || AH->format != archNull) + if (ropt->createDB) return REQ_SCHEMA; else return 0; diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index af7d815a77..2d3ae14f75 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -1090,8 +1090,11 @@ restoreAllDatabases(PGconn *conn, const char *dumpdirpath, * To restore multiple databases, -C (create database) option should be specified * or all databases should be created before pg_restore. */ - if (opts->createDB != 1) - pg_log_info("restoring dump of pg_dumpall without -C option, there might be multiple databases in directory."); + if (num_db_restore > 1 && opts->createDB != 1) + { + pg_log_info("restoring multiple databases without -C option, implicit -C is assumed"); + opts->createDB = 1; + } /* TODO: MAX_ON_EXIT_NICELY is 100 now... max AH handle register on exit .*/ if (num_db_restore > MAX_ON_EXIT_NICELY) @@ -1144,7 +1147,10 @@ restoreAllDatabases(PGconn *conn, const char *dumpdirpath, pg_log_info("restoring database \"%s\"", dboid_cell->db_name); - dbexit_code = restoreOneDatabase(subdirpath, opts, numWorkers, true, dboid_cell->db_name); + if (num_db_restore == 1) + dbexit_code = restoreOneDatabase(subdirpath, opts, numWorkers, false, dboid_cell->db_name); + else + dbexit_code = restoreOneDatabase(subdirpath, opts, numWorkers, true, dboid_cell->db_name); /* Store exit_code to report it back. */ if (exit_code == 0 && dbexit_code != 0)