Skip to content

Commit ff3bee2

Browse files
committed
feat: WIP
1 parent a1ff2e9 commit ff3bee2

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

internal/controller/postgresql/postgres/database.go

+15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const (
1010
CascadeKeyword = "CASCADE"
1111
RestrictKeyword = "RESTRICT"
1212
CreateDBSQLTemplate = `CREATE DATABASE "%s" WITH OWNER = "%s"`
13+
ChangeDBOwnerSQLTemplate = `ALTER DATABASE "%s" OWNER TO "%s"`
1314
IsDatabaseExistSQLTemplate = `SELECT 1 FROM pg_database WHERE datname='%s'`
1415
RenameDatabaseSQLTemplate = `ALTER DATABASE "%s" RENAME TO "%s"`
1516
CreateSchemaSQLTemplate = `CREATE SCHEMA IF NOT EXISTS "%s" AUTHORIZATION "%s"`
@@ -75,6 +76,20 @@ func (c *pg) CreateDB(dbname, role string) error {
7576
return nil
7677
}
7778

79+
func (c *pg) ChangeDBOwner(dbname, owner string) error {
80+
err := c.connect(c.defaultDatabase)
81+
if err != nil {
82+
return err
83+
}
84+
85+
_, err = c.db.Exec(fmt.Sprintf(ChangeDBOwnerSQLTemplate, dbname, owner))
86+
if err != nil {
87+
return err
88+
}
89+
90+
return nil
91+
}
92+
7893
func (c *pg) CreateSchema(db, role, schema string) error {
7994
err := c.connect(db)
8095
if err != nil {

internal/controller/postgresql/postgres/postgres.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type SetRoleOnDatabaseRoleSetting struct {
1717

1818
type PG interface { //nolint:interfacebloat // This is needed
1919
CreateDB(dbname, username string) error
20+
ChangeDBOwner(dbname, owner string) error
2021
IsDatabaseExist(dbname string) (bool, error)
2122
RenameDatabase(oldname, newname string) error
2223
CreateSchema(db, role, schema string) error

internal/controller/postgresql/postgresqldatabase_controller_test.go

+14-1
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,20 @@ var _ = Describe("PostgresqlDatabase tests", func() {
458458
Expect(stillExists).To(BeTrue())
459459
})
460460

461+
It("should be ok to recover a wrong database owner", func() {
462+
// Create pgec
463+
setupPGECWithAllowGrantAdminOption("10s", false)
464+
465+
// Create pgdb
466+
item := setupPGDB(true)
467+
468+
Expect(item.Status.Ready).To(BeTrue())
469+
Expect(item.Status.Phase).To(Equal(postgresqlv1alpha1.DatabaseCreatedPhase))
470+
Expect(item.Status.Database).To(Equal(pgdbDBName))
471+
472+
// Change db owner to
473+
})
474+
461475
It("should be ok to have a pgdb with a pgec with allow grant admin option on roles", func() {
462476
// Create pgec
463477
setupPGECWithAllowGrantAdminOption("10s", false)
@@ -2024,7 +2038,6 @@ var _ = Describe("PostgresqlDatabase tests", func() {
20242038
oldExists, oldErr := isSQLDBExists(pgdbDBName + "-old")
20252039
Expect(oldErr).ToNot(HaveOccurred())
20262040
Expect(oldExists).To(BeFalse())
2027-
20282041
})
20292042

20302043
It("should be ok to delete it with wait and nothing linked", func() {

internal/controller/postgresql/suite_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -1099,6 +1099,24 @@ func disconnectConnFromKey(key string) error {
10991099
return nil
11001100
}
11011101

1102+
func changeDBOwner(dbname, role string) error {
1103+
if mainDBConn == nil {
1104+
db, err := sql.Open("postgres", postgresUrl)
1105+
if err != nil {
1106+
return err
1107+
}
1108+
mainDBConn = db
1109+
}
1110+
1111+
sqlTemplate := `ALTER DATABASE "%s" OWNER TO "%s"`
1112+
_, err := mainDBConn.Exec(fmt.Sprintf(sqlTemplate, dbname, role))
1113+
if err != nil {
1114+
return err
1115+
}
1116+
1117+
return nil
1118+
}
1119+
11021120
func isRoleOwnerofSQLDB(dbname, role string) (bool, error) {
11031121
// Query template
11041122
IsRoleOwnerOfDbSQLTemplate := `SELECT 1 FROM pg_catalog.pg_database d WHERE d.datname = '%s' AND pg_catalog.pg_get_userbyid(d.datdba) = '%s';`

0 commit comments

Comments
 (0)