mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Sort DO_DEFAULT_ACL dump objects independent of OIDs.
Commit 0decd5e89d missed DO_DEFAULT_ACL,
leading to assertion failures, potential dump order instability, and
spurious schema diffs.  Back-patch to v13, like that commit.
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Kirill Reshke <reshkekirill@gmail.com>
Discussion: https://postgr.es/m/d32aaa8d-df7c-4f94-bcb3-4c85f02bea21@gmail.com
Backpatch-through: 13
			
			
This commit is contained in:
		@@ -417,6 +417,19 @@ DOTypeNameCompare(const void *p1, const void *p2)
 | 
				
			|||||||
				return cmpval;
 | 
									return cmpval;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						else if (obj1->objType == DO_DEFAULT_ACL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							DefaultACLInfo *daclobj1 = *(DefaultACLInfo *const *) p1;
 | 
				
			||||||
 | 
							DefaultACLInfo *daclobj2 = *(DefaultACLInfo *const *) p2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Sort by defaclrole, per pg_default_acl_role_nsp_obj_index.  The
 | 
				
			||||||
 | 
							 * (namespace, name) match (defaclnamespace, defaclobjtype).
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							cmpval = strcmp(daclobj1->defaclrole, daclobj2->defaclrole);
 | 
				
			||||||
 | 
							if (cmpval != 0)
 | 
				
			||||||
 | 
								return cmpval;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	else if (obj1->objType == DO_PUBLICATION_REL)
 | 
						else if (obj1->objType == DO_PUBLICATION_REL)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		PublicationRelInfo *probj1 = *(PublicationRelInfo *const *) p1;
 | 
							PublicationRelInfo *probj1 = *(PublicationRelInfo *const *) p1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2825,6 +2825,11 @@ DROP USER regress_priv_user6;
 | 
				
			|||||||
DROP USER regress_priv_user7;
 | 
					DROP USER regress_priv_user7;
 | 
				
			||||||
DROP USER regress_priv_user8; -- does not exist
 | 
					DROP USER regress_priv_user8; -- does not exist
 | 
				
			||||||
ERROR:  role "regress_priv_user8" does not exist
 | 
					ERROR:  role "regress_priv_user8" does not exist
 | 
				
			||||||
 | 
					-- leave some default ACLs for pg_upgrade's dump-restore test input.
 | 
				
			||||||
 | 
					ALTER DEFAULT PRIVILEGES FOR ROLE pg_signal_backend
 | 
				
			||||||
 | 
						REVOKE INSERT ON TABLES FROM pg_signal_backend;
 | 
				
			||||||
 | 
					ALTER DEFAULT PRIVILEGES FOR ROLE pg_read_all_settings
 | 
				
			||||||
 | 
						REVOKE INSERT ON TABLES FROM pg_read_all_settings;
 | 
				
			||||||
-- permissions with LOCK TABLE
 | 
					-- permissions with LOCK TABLE
 | 
				
			||||||
CREATE USER regress_locktable_user;
 | 
					CREATE USER regress_locktable_user;
 | 
				
			||||||
CREATE TABLE lock_table (a int);
 | 
					CREATE TABLE lock_table (a int);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1764,6 +1764,13 @@ DROP USER regress_priv_user7;
 | 
				
			|||||||
DROP USER regress_priv_user8; -- does not exist
 | 
					DROP USER regress_priv_user8; -- does not exist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- leave some default ACLs for pg_upgrade's dump-restore test input.
 | 
				
			||||||
 | 
					ALTER DEFAULT PRIVILEGES FOR ROLE pg_signal_backend
 | 
				
			||||||
 | 
						REVOKE INSERT ON TABLES FROM pg_signal_backend;
 | 
				
			||||||
 | 
					ALTER DEFAULT PRIVILEGES FOR ROLE pg_read_all_settings
 | 
				
			||||||
 | 
						REVOKE INSERT ON TABLES FROM pg_read_all_settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- permissions with LOCK TABLE
 | 
					-- permissions with LOCK TABLE
 | 
				
			||||||
CREATE USER regress_locktable_user;
 | 
					CREATE USER regress_locktable_user;
 | 
				
			||||||
CREATE TABLE lock_table (a int);
 | 
					CREATE TABLE lock_table (a int);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user