On Thu, 23 Jan 2025 at 14:59, jian he <jian.universal...@gmail.com> wrote: > > hi. > The four patches attached are to solve the > TODO1: We need to think for --exclude-database=PATTERN for pg_restore. > it is based on your > v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch > > > 0001. pg_dumpall --exclude-database=PATTERN already works, > main function resolve pattern matching is expand_dbname_patterns. > make it an extern function, so pg_restore --exclude-database can also use it.
Hi Jian, We can't use the same expand_dbname_patterns function pg_restore. In the 1st patch, by mistake I also used this function but then I realised that we should not use this function due to some limitation for pg_restore. While doing pg_dumpall, we have all the existence database names in the pg_database catalog but while restoring, we don't have all databases in the catalog. Actually, we will read dbnames from map.dat file to skip matching patterns for restore. Ex: let say we have a fresh server with postgres and template1 databases. Now we want to restore one backup and inside the map.dat file, we have dbname=db_123 and dbname=db_234. If we want to use --exclude-database=db_123, then your patch will not work as this db hasn't been created. Please cross verify again and let me know your feedback. I think, as of now, mine v11 patch is working as per expectation. > > 0002 cosmetic code changes not in pg_restore.c > 0003 cosmetic code changes in pg_restore.c > > > 0004 fully implement pg_restore --exclude-database=PATTERN > similar to pg_dumpall.c > declare two file static variables: > static SimpleStringList database_exclude_names = {NULL, NULL}; > static SimpleStringList db_exclude_patterns = {NULL, NULL}; > I also deleted the function is_full_pattern. > > > I use > $BIN10/pg_restore --exclude-database=*x* --exclude-database=*s* > --exclude-database=*t* --verbose --file=test.sql x1.dump > the verbose message to verify my changes. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com