@@ -2406,7 +2406,8 @@ def relations_user_databases_map(self) -> dict:
24062406 except PostgreSQLListGroupsError as e :
24072407 logger .warning (f"Failed to list access groups: { e } " )
24082408 return {USER : "all" , REPLICATION_USER : "all" , REWIND_USER : "all" }
2409- user_database_map = {}
2409+
2410+ user_database_map = self ._collect_user_relations ()
24102411 for user in self .postgresql .list_users (current_host = self .is_connectivity_enabled ):
24112412 if user in (
24122413 "backup" ,
@@ -2426,30 +2427,26 @@ def relations_user_databases_map(self) -> dict:
24262427 else :
24272428 logger .debug (f"User { user } has no databases to connect to" )
24282429
2429- # Copy relations users directly instead of waiting for them to be created
2430- custom_username_mapping = self .postgresql_client_relation .get_username_mapping ()
2431- for relation in self .model .relations [self .postgresql_client_relation .relation_name ]:
2432- user = custom_username_mapping .get (str (relation .id ), f"relation_id_{ relation .id } " )
2433- if user not in user_database_map and (
2434- database := self .postgresql_client_relation .database_provides .fetch_relation_field (
2435- relation .id , "database"
2436- )
2437- ):
2438- user_database_map [user ] = database
24392430 return user_database_map
24402431
2441- @cached_property
2442- def generate_user_hash (self ) -> str :
2443- """Generate expected user and database hash."""
2432+ def _collect_user_relations (self ) -> dict [str , str ]:
24442433 user_db_pairs = {}
24452434 custom_username_mapping = self .postgresql_client_relation .get_username_mapping ()
2435+ prefix_database_mapping = self .postgresql_client_relation .get_databases_prefix_mapping ()
2436+
24462437 for relation in self .model .relations [self .postgresql_client_relation .relation_name ]:
24472438 if database := self .postgresql_client_relation .database_provides .fetch_relation_field (
24482439 relation .id , "database"
24492440 ):
24502441 user = custom_username_mapping .get (str (relation .id ), f"relation_id_{ relation .id } " )
2442+ database = "," .join (prefix_database_mapping .get (str (relation .id ), [database ]))
24512443 user_db_pairs [user ] = database
2452- return shake_128 (str (user_db_pairs ).encode ()).hexdigest (16 )
2444+ return user_db_pairs
2445+
2446+ @cached_property
2447+ def generate_user_hash (self ) -> str :
2448+ """Generate expected user and database hash."""
2449+ return shake_128 (str (self ._collect_user_relations ()).encode ()).hexdigest (16 )
24532450
24542451 def override_patroni_on_failure_condition (
24552452 self , new_condition : str , repeat_cause : str | None
0 commit comments