CNPG's default database owner name is app. When using a non-default name with the cnpg chart, the controller believes the app user still exists, and logs errors because it cannot rotate the credentials. Example from vegbank prod deployment cnpg logs:
{"level":"error","ts":"2026-03-30T17:06:40.552478459Z","msg":"Reconciler error",
"logger":"instance-manager","logging_pod":"vegbankdb2-cnpg-1",
"controller":"instance-cluster","controllerGroup":"postgresql.cnpg.io",
"controllerKind":"Cluster","Cluster":{"name":"vegbankdb2-cnpg",
"namespace":"vegbank"},"namespace":"vegbank","name":"vegbankdb2cnpg""reconcileID":"31cff6ce-c7fc-4912-835c-879dddd05fdf",
"error":"while updating database owner password: ERROR: role \"app\" does not exist (SQLSTATE 42704)",
"stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler\n\tpkg/mod/sigs.k8s.io/controller-
runtime@v0.21.0/pkg/internal/controller/controller.go:353\nsigs.k8s.io/controller-
runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem\n\tpkg/mod/sigs.k8s.io/controller-
runtime@v0.21.0/pkg/internal/controller/controller.go:300\nsigs.k8s.io/controller-
runtime/pkg/internal/controller.(*Controller[...]).Start.func2.1\n\tpkg/mod/sigs.k8s.io/controller-
runtime@v0.21.0/pkg/internal/controller/controller.go:202"}
{"level":"info","ts":"2026-03-30T17:06:40.552524335Z","logger":"postgres","msg":"record",
"logging_pod":"vegbankdb2-cnpg-1","record":{"log_time":"2026-03-30 17:06:40.552 UTC",
"user_name":"postgres","database_name":"postgres","process_id":"1443",
"connection_from":"[local]","session_id":"69caada0.5a3","session_line_num":"1",
"command_tag":"ALTER ROLE","session_start_time":"2026-03-30 17:06:40 UTC",
"virtual_transaction_id":"84/17","transaction_id":"0","error_severity":"ERROR",
"sql_state_code":"42704","message":"role \"app\" does not exist",
"query":"ALTER ROLE \"app\" WITH PASSWORD '(MB redacted)'",
"application_name":"cnpg-instance-manager","backend_type":"client backend","query_id":"0"}}
CNPG's default database owner name is
app. When using a non-default name with the cnpg chart, the controller believes theappuser still exists, and logs errors because it cannot rotate the credentials. Example from vegbank prod deployment cnpg logs:{"level":"error","ts":"2026-03-30T17:06:40.552478459Z","msg":"Reconciler error", "logger":"instance-manager","logging_pod":"vegbankdb2-cnpg-1", "controller":"instance-cluster","controllerGroup":"postgresql.cnpg.io", "controllerKind":"Cluster","Cluster":{"name":"vegbankdb2-cnpg", "namespace":"vegbank"},"namespace":"vegbank","name":"vegbankdb2cnpg""reconcileID":"31cff6ce-c7fc-4912-835c-879dddd05fdf", "error":"while updating database owner password: ERROR: role \"app\" does not exist (SQLSTATE 42704)", "stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler\n\tpkg/mod/sigs.k8s.io/controller- runtime@v0.21.0/pkg/internal/controller/controller.go:353\nsigs.k8s.io/controller- runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem\n\tpkg/mod/sigs.k8s.io/controller- runtime@v0.21.0/pkg/internal/controller/controller.go:300\nsigs.k8s.io/controller- runtime/pkg/internal/controller.(*Controller[...]).Start.func2.1\n\tpkg/mod/sigs.k8s.io/controller- runtime@v0.21.0/pkg/internal/controller/controller.go:202"} {"level":"info","ts":"2026-03-30T17:06:40.552524335Z","logger":"postgres","msg":"record", "logging_pod":"vegbankdb2-cnpg-1","record":{"log_time":"2026-03-30 17:06:40.552 UTC", "user_name":"postgres","database_name":"postgres","process_id":"1443", "connection_from":"[local]","session_id":"69caada0.5a3","session_line_num":"1", "command_tag":"ALTER ROLE","session_start_time":"2026-03-30 17:06:40 UTC", "virtual_transaction_id":"84/17","transaction_id":"0","error_severity":"ERROR", "sql_state_code":"42704","message":"role \"app\" does not exist", "query":"ALTER ROLE \"app\" WITH PASSWORD '(MB redacted)'", "application_name":"cnpg-instance-manager","backend_type":"client backend","query_id":"0"}}