Postgres Roles vs Users

Confusion clarified.

Overview

In modern Postgres, “user” and “role” are the same thing: CREATE USER is just an alias for CREATE ROLE WITH LOGIN. The role model is the access-control system, and it supports RBAC through role membership: group roles hold permissions, login roles get added to groups, members inherit. Understanding the model rather than the legacy syntax produces cleaner access control and easier onboarding/offboarding.

The approach

The practical approach is group roles for RBAC (readers, writers, admins as group roles holding permissions), login roles for users (per-human and per-application logins as members of the appropriate groups), membership for access management (adding a user to a group, not granting per-table permissions to each user), SET ROLE for temporary elevation in ops contexts, and per-database role hierarchy documented in the schema repo so the access model is reviewable.

Why this compounds

Postgres role discipline compounds across the database lifetime. Each correctly-modeled role hierarchy supports clean onboarding and offboarding; each group role survives team turnover; the access model stays auditable rather than degrading into per-table grants accumulated over years.

Postgres role discipline is a database discipline that pays off across years. Nova AI Ops integrates with database telemetry, surfaces role patterns, and supports the team’s database security discipline.