-
Notifications
You must be signed in to change notification settings - Fork 258
Description
Affected Resource(s)
- postgresql_database
- postgresql_role
provider version: 1.21.0
The issue is likely related to Postgres 16 Permission/Grant changes.
Terraform Configuration Files
resource "postgresql_role" "dbs" {
for_each = var.dbs
name = each.key
login = true
password = random_password.dbs[each.key].result
}
resource "postgresql_database" "dbs" {
for_each = var.dbs
name = each.key
owner = postgresql_role.dbs[each.key].name
lc_collate = "en_US.utf8"
allow_connections = true
}
Expected Behavior
Database should be created.
Actual Behavior
Error: Error creating database "<name>": pq: must be able to SET ROLE "<name>"
Postgres 16 Release and Documentation References
Details related to permission in Postgres 16 Changelog:
https://www.postgresql.org/docs/16/release-16.html
Add GRANT to control permission to use SET ROLE (Robert Haas)
This is controlled by a new GRANT ... SET option.
https://www.postgresql.fastware.com/blog/discussing-postgresql-what-changes-in-version-16
The GRANT … SET option was added
The SET option, if set to TRUE, allows the member to change to the granted role using the SET ROLE command. To create an object owned by another role or to give ownership of an existing object to another role, you must have the ability to SET ROLE to that role. Otherwise, commands such as ALTER ... OWNER TO or CREATE DATABASE ... OWNER will fail.
https://www.postgresql.org/docs/current/sql-grant.html
Section:
GRANT on Roles
It looks like that this permission is not applied to the db admin user when creating the role.
Assume changes would be needed in the postgresql_role
to be able to grant this option to the according user or implicitly always grant it to the creating user (provider connection).
Important Factoids
Azure PostgreSQL flexible server version 16