@@ -959,32 +959,42 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
959959 }
960960
961961 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+
962974 // 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 {
964976 return fmt .Errorf ("could not initialize default roles for database %s: %v" , preparedDbName , err )
965977 }
966978 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 {
968980 return fmt .Errorf ("could not initialize default roles for database %s: %v" , preparedDbName , err )
969981 }
970982 }
971983
972984 // 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- }
977985 for preparedSchemaName , preparedSchema := range preparedSchemas {
978986 if preparedSchema .DefaultRoles == nil || * preparedSchema .DefaultRoles {
979987 if err := c .initDefaultRoles (defaultRoles ,
980988 preparedDbName + constants .OwnerRoleNameSuffix ,
981- preparedDbName + "_" + preparedSchemaName ); err != nil {
989+ preparedDbName + "_" + preparedSchemaName ,
990+ constants .DefaultSearchPath + ", " + preparedSchemaName ); err != nil {
982991 return fmt .Errorf ("could not initialize default roles for database schema %s: %v" , preparedSchemaName , err )
983992 }
984993 if preparedSchema .DefaultUsers {
985994 if err := c .initDefaultRoles (defaultUsers ,
986995 preparedDbName + constants .OwnerRoleNameSuffix ,
987- preparedDbName + "_" + preparedSchemaName ); err != nil {
996+ preparedDbName + "_" + preparedSchemaName ,
997+ constants .DefaultSearchPath + ", " + preparedSchemaName ); err != nil {
988998 return fmt .Errorf ("could not initialize default users for database schema %s: %v" , preparedSchemaName , err )
989999 }
9901000 }
@@ -994,7 +1004,7 @@ func (c *Cluster) initPreparedDatabaseRoles() error {
9941004 return nil
9951005}
9961006
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 {
9981008
9991009 for defaultRole , inherits := range defaultRoles {
10001010
@@ -1018,12 +1028,13 @@ func (c *Cluster) initDefaultRoles(defaultRoles map[string]string, admin, prefix
10181028 }
10191029
10201030 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 ,
10271038 }
10281039 if currentRole , present := c .pgUsers [roleName ]; present {
10291040 c .pgUsers [roleName ] = c .resolveNameConflict (& currentRole , & newRole )
0 commit comments