@@ -168,6 +168,22 @@ func (r *PostgresReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
168168 instance .Status .Roles .Writer = writer
169169 instance .Status .Succeeded = true
170170 }
171+
172+ desiredOwner := instance .Spec .MasterRole
173+ // handle owner rename if was previously set by instance.Spec.MasterRole then was removed
174+ if desiredOwner == "" {
175+ desiredOwner = fmt .Sprintf ("%s-group" , instance .Spec .Database )
176+ }
177+ // rename owner role if instance.Spec.MasterRole was changed
178+ ownerChanged := instance .Status .Roles .Owner != "" && instance .Status .Roles .Owner != desiredOwner
179+ if ownerChanged {
180+ err = r .pg .RenameGroupRole (instance .Status .Roles .Owner , desiredOwner )
181+ if err != nil {
182+ return requeue (errors .NewInternalError (err ))
183+ }
184+ instance .Status .Roles .Owner = desiredOwner
185+ }
186+
171187 // create extensions
172188 for _ , extension := range instance .Spec .Extensions {
173189 // Check if extension is already added. Skip if already is added.
@@ -192,7 +208,7 @@ func (r *PostgresReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
192208 writerPrivs = "SELECT,INSERT,DELETE,UPDATE"
193209 writerSequencePrivs = "USAGE,SELECT"
194210 writerFunctionPrivs = "EXECUTE"
195- ownerPrivs = "ALL"
211+ ownerPrivs = "ALL,MAINTAIN "
196212 ownerFunctionPrivs = "ALL"
197213 ownerSequencePrivs = "ALL"
198214 )
@@ -208,6 +224,11 @@ func (r *PostgresReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
208224 reqLogger .Error (err , fmt .Sprintf ("Could not create schema %s" , schema ))
209225 continue
210226 }
227+ instance .Status .Schemas = append (instance .Status .Schemas , schema )
228+ }
229+
230+ // Set privileges on schemas during every reconcile to ensure privileges are correct
231+ for _ , schema := range instance .Spec .Schemas {
211232
212233 // Set privileges on schema
213234 schemaPrivilegesReader := postgres.PostgresSchemaPrivileges {
@@ -250,9 +271,8 @@ func (r *PostgresReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
250271 reqLogger .Error (err , fmt .Sprintf ("Could not give %s permissions \" %s\" , sequence privileges \" %s\" , and function privileges \" %s\" " , owner , ownerPrivs , ownerSequencePrivs , ownerFunctionPrivs ))
251272 continue
252273 }
253-
254- instance .Status .Schemas = append (instance .Status .Schemas , schema )
255274 }
275+
256276 err = r .Status ().Patch (ctx , instance , client .MergeFrom (before ))
257277 if err != nil {
258278 return requeue (err )
0 commit comments