@@ -22,16 +22,15 @@ package lifecycle
2222import (
2323 "context"
2424 "database/sql"
25+ "errors"
2526 "fmt"
2627 "sync"
2728
28- "github.com/blang/semver"
2929 "github.com/cloudnative-pg/machinery/pkg/log"
3030 "github.com/jackc/pgx/v5"
3131
3232 apiv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
3333 "github.com/cloudnative-pg/cloudnative-pg/pkg/management/postgres"
34- postgresutils "github.com/cloudnative-pg/cloudnative-pg/pkg/management/postgres/utils"
3534)
3635
3736var identifierStreamingReplicationUser = pgx.Identifier {apiv1 .StreamingReplicationUser }.Sanitize ()
@@ -153,11 +152,6 @@ func configureInstancePermissions(ctx context.Context, instance *postgres.Instan
153152 return nil
154153 }
155154
156- pgVersion , err := postgresutils .GetPgdataVersion (instance .PgData )
157- if err != nil {
158- return fmt .Errorf ("while getting major version: %w" , err )
159- }
160-
161155 db , err := instance .GetSuperUserDB ()
162156 if err != nil {
163157 return fmt .Errorf ("while getting a connection to the instance: %w" , err )
@@ -177,14 +171,12 @@ func configureInstancePermissions(ctx context.Context, instance *postgres.Instan
177171 return fmt .Errorf ("creating a new transaction to setup the instance: %w" , err )
178172 }
179173
180- hasSuperuser , err := configureStreamingReplicaUser (tx )
181- if err != nil {
174+ if err := configureStreamingReplicaUser (tx ); err != nil {
182175 _ = tx .Rollback ()
183176 return err
184177 }
185178
186- err = configurePgRewindPrivileges (pgVersion , hasSuperuser , tx )
187- if err != nil {
179+ if err = configurePgRewindPrivileges (tx ); err != nil {
188180 _ = tx .Rollback ()
189181 return err
190182 }
@@ -194,28 +186,28 @@ func configureInstancePermissions(ctx context.Context, instance *postgres.Instan
194186
195187// configureStreamingReplicaUser makes sure the streaming replication user exists
196188// and has the required rights
197- func configureStreamingReplicaUser (tx * sql.Tx ) ( bool , error ) {
198- var hasLoginRight , hasReplicationRight , hasSuperuser bool
199- row := tx .QueryRow ("SELECT rolcanlogin, rolreplication, rolsuper FROM pg_catalog.pg_roles WHERE rolname = $1" ,
189+ func configureStreamingReplicaUser (tx * sql.Tx ) error {
190+ var hasLoginRight , hasReplicationRight bool
191+ row := tx .QueryRow ("SELECT rolcanlogin, rolreplication FROM pg_catalog.pg_roles WHERE rolname = $1" ,
200192 apiv1 .StreamingReplicationUser )
201- err := row .Scan (& hasLoginRight , & hasReplicationRight , & hasSuperuser )
193+ err := row .Scan (& hasLoginRight , & hasReplicationRight )
202194 if err != nil {
203- if err != sql .ErrNoRows {
204- return false , fmt .Errorf ("while creating streaming replication user: %w" , err )
195+ if ! errors . Is ( err , sql .ErrNoRows ) {
196+ return fmt .Errorf ("while getting streaming replication user privileges : %w" , err )
205197 }
206198
207199 _ , err = tx .Exec (fmt .Sprintf (
208200 "CREATE USER %v REPLICATION" ,
209201 identifierStreamingReplicationUser ))
210202 if err != nil {
211- return false , fmt .Errorf ("CREATE USER %v error: %w" , apiv1 .StreamingReplicationUser , err )
203+ return fmt .Errorf ("CREATE USER %v error: %w" , apiv1 .StreamingReplicationUser , err )
212204 }
213205
214206 _ , err = tx .Exec (fmt .Sprintf (
215207 "COMMENT ON ROLE %v IS 'Special user for streaming replication created by CloudNativePG'" ,
216208 identifierStreamingReplicationUser ))
217209 if err != nil {
218- return false , fmt .Errorf ("COMMENT ON ROLE %v error: %w" , apiv1 .StreamingReplicationUser , err )
210+ return fmt .Errorf ("COMMENT ON ROLE %v error: %w" , apiv1 .StreamingReplicationUser , err )
219211 }
220212 }
221213
@@ -224,28 +216,14 @@ func configureStreamingReplicaUser(tx *sql.Tx) (bool, error) {
224216 "ALTER USER %v LOGIN REPLICATION" ,
225217 identifierStreamingReplicationUser ))
226218 if err != nil {
227- return false , fmt .Errorf ("ALTER USER %v error: %w" , apiv1 .StreamingReplicationUser , err )
219+ return fmt .Errorf ("ALTER USER %v error: %w" , apiv1 .StreamingReplicationUser , err )
228220 }
229221 }
230- return hasSuperuser , nil
222+ return nil
231223}
232224
233225// configurePgRewindPrivileges ensures that the StreamingReplicationUser has enough rights to execute pg_rewind
234- func configurePgRewindPrivileges (pgVersion semver.Version , hasSuperuser bool , tx * sql.Tx ) error {
235- // We need the superuser bit for the streaming-replication user since pg_rewind in PostgreSQL <= 10
236- // will require it.
237- if pgVersion .Major <= 10 {
238- if ! hasSuperuser {
239- _ , err := tx .Exec (fmt .Sprintf (
240- "ALTER USER %v SUPERUSER" ,
241- identifierStreamingReplicationUser ))
242- if err != nil {
243- return fmt .Errorf ("ALTER USER %v error: %w" , apiv1 .StreamingReplicationUser , err )
244- }
245- }
246- return nil
247- }
248-
226+ func configurePgRewindPrivileges (tx * sql.Tx ) error {
249227 // Ensure the user has rights to execute the functions needed for pg_rewind
250228 var hasPgRewindPrivileges bool
251229 row := tx .QueryRow (
0 commit comments