Skip to content

Commit daba1af

Browse files
committed
grant role membership for when connection user is not superuser
1 parent 873f86a commit daba1af

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

builtin/providers/postgresql/resource_postgresql_database.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ func resourcePostgreSQLDatabaseCreate(d *schema.ResourceData, meta interface{})
122122
b := bytes.NewBufferString("CREATE DATABASE ")
123123
fmt.Fprint(b, pq.QuoteIdentifier(dbName))
124124

125+
//needed in order to set the owner of the db if the connection user is not a superuser
126+
err = grantRoleMembership(conn, d.Get(dbOwnerAttr).(string), c.username)
127+
if err != nil {
128+
return err
129+
}
130+
125131
// Handle each option individually and stream results into the query
126132
// buffer.
127133

@@ -464,3 +470,18 @@ func doSetDBIsTemplate(conn *sql.DB, dbName string, isTemplate bool) error {
464470

465471
return nil
466472
}
473+
474+
func grantRoleMembership(conn *sql.DB, dbOwner string, connUsername string) error {
475+
if dbOwner != "" && dbOwner != connUsername {
476+
query := fmt.Sprintf("GRANT %s TO %s", pq.QuoteIdentifier(dbOwner), pq.QuoteIdentifier(connUsername))
477+
_, err := conn.Query(query)
478+
if err != nil {
479+
// is already member or role
480+
if strings.Contains(err.Error(), "duplicate key value violates unique constraint") {
481+
return nil
482+
}
483+
return errwrap.Wrapf("Error granting membership: {{err}}", err)
484+
}
485+
}
486+
return nil
487+
}

0 commit comments

Comments
 (0)