@@ -959,32 +959,42 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
959
959
}
960
960
961
961
for preparedDbName , preparedDB := range c .Spec .PreparedDatabases {
962
+ // get list of prepared schemas to set in search_path
963
+ preparedSchemas := preparedDB .PreparedSchemas
964
+ if len (preparedDB .PreparedSchemas ) == 0 {
965
+ preparedSchemas = map [string ]acidv1.PreparedSchema {"data" : {DefaultRoles : util .True ()}}
966
+ }
967
+
968
+ var searchPath strings.Builder
969
+ searchPath .WriteString (constants .DefaultSearchPath )
970
+ for preparedSchemaName := range preparedSchemas {
971
+ searchPath .WriteString (", " + preparedSchemaName )
972
+ }
973
+
962
974
// default roles per database
963
- if err := c .initDefaultRoles (defaultRoles , "admin" , preparedDbName ); err != nil {
975
+ if err := c .initDefaultRoles (defaultRoles , "admin" , preparedDbName , searchPath . String () ); err != nil {
964
976
return fmt .Errorf ("could not initialize default roles for database %s: %v" , preparedDbName , err )
965
977
}
966
978
if preparedDB .DefaultUsers {
967
- if err := c .initDefaultRoles (defaultUsers , "admin" , preparedDbName ); err != nil {
979
+ if err := c .initDefaultRoles (defaultUsers , "admin" , preparedDbName , searchPath . String () ); err != nil {
968
980
return fmt .Errorf ("could not initialize default roles for database %s: %v" , preparedDbName , err )
969
981
}
970
982
}
971
983
972
984
// default roles per database schema
973
- preparedSchemas := preparedDB .PreparedSchemas
974
- if len (preparedDB .PreparedSchemas ) == 0 {
975
- preparedSchemas = map [string ]acidv1.PreparedSchema {"data" : {DefaultRoles : util .True ()}}
976
- }
977
985
for preparedSchemaName , preparedSchema := range preparedSchemas {
978
986
if preparedSchema .DefaultRoles == nil || * preparedSchema .DefaultRoles {
979
987
if err := c .initDefaultRoles (defaultRoles ,
980
988
preparedDbName + constants .OwnerRoleNameSuffix ,
981
- preparedDbName + "_" + preparedSchemaName ); err != nil {
989
+ preparedDbName + "_" + preparedSchemaName ,
990
+ constants .DefaultSearchPath + ", " + preparedSchemaName ); err != nil {
982
991
return fmt .Errorf ("could not initialize default roles for database schema %s: %v" , preparedSchemaName , err )
983
992
}
984
993
if preparedSchema .DefaultUsers {
985
994
if err := c .initDefaultRoles (defaultUsers ,
986
995
preparedDbName + constants .OwnerRoleNameSuffix ,
987
- preparedDbName + "_" + preparedSchemaName ); err != nil {
996
+ preparedDbName + "_" + preparedSchemaName ,
997
+ constants .DefaultSearchPath + ", " + preparedSchemaName ); err != nil {
988
998
return fmt .Errorf ("could not initialize default users for database schema %s: %v" , preparedSchemaName , err )
989
999
}
990
1000
}
@@ -994,7 +1004,7 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
994
1004
return nil
995
1005
}
996
1006
997
- func (c * Cluster ) initDefaultRoles (defaultRoles map [string ]string , admin , prefix string ) error {
1007
+ func (c * Cluster ) initDefaultRoles (defaultRoles map [string ]string , admin , prefix string , searchPath string ) error {
998
1008
999
1009
for defaultRole , inherits := range defaultRoles {
1000
1010
@@ -1018,12 +1028,13 @@ func (c *Cluster) initDefaultRoles(defaultRoles map[string]string, admin, prefix
1018
1028
}
1019
1029
1020
1030
newRole := spec.PgUser {
1021
- Origin : spec .RoleOriginBootstrap ,
1022
- Name : roleName ,
1023
- Password : util .RandomPassword (constants .PasswordLength ),
1024
- Flags : flags ,
1025
- MemberOf : memberOf ,
1026
- AdminRole : adminRole ,
1031
+ Origin : spec .RoleOriginBootstrap ,
1032
+ Name : roleName ,
1033
+ Password : util .RandomPassword (constants .PasswordLength ),
1034
+ Flags : flags ,
1035
+ MemberOf : memberOf ,
1036
+ Parameters : map [string ]string {"search_path" : searchPath },
1037
+ AdminRole : adminRole ,
1027
1038
}
1028
1039
if currentRole , present := c .pgUsers [roleName ]; present {
1029
1040
c .pgUsers [roleName ] = c .resolveNameConflict (& currentRole , & newRole )
0 commit comments