Managing Users and Roles
1. Creating Role
CREATE ROLE app_reader; -- NOLOGIN by default
CREATE ROLE app_writer INHERIT;
2. Creating User
CREATE USER alice PASSWORD 'secret'; -- shorthand for CREATE ROLE LOGIN
3. Setting Password
ALTER ROLE alice PASSWORD 'newSecret';
\password alice -- psql: encrypts client-side
4. Granting Login Privilege
ALTER ROLE app_reader LOGIN;
ALTER ROLE old_user NOLOGIN; -- disable
5. Granting Superuser Privilege
ALTER ROLE admin SUPERUSER;
Warning: SUPERUSER bypasses all permission checks including RLS. Use sparingly.
6. Granting CREATEDB Privilege
ALTER ROLE alice CREATEDB;
7. Granting CREATEROLE Privilege
ALTER ROLE alice CREATEROLE;
8. Granting REPLICATION Privilege
CREATE ROLE repl REPLICATION LOGIN PASSWORD '...';
9. Setting Connection Limit
ALTER ROLE app_reader CONNECTION LIMIT 50;
10. Setting Valid Until
ALTER ROLE temp_user VALID UNTIL '2025-12-31 23:59:59 UTC';
11. Altering Role Properties
ALTER ROLE alice SET search_path = app, public;
ALTER ROLE alice SET statement_timeout = '30s';
ALTER ROLE alice IN DATABASE shop SET work_mem = '64MB';
12. Renaming Role
ALTER ROLE alice RENAME TO alice_smith;
Note: If the role has an MD5 password, rename clears it (since the username is part of the hash).
13. Setting Role Password
SET password_encryption = 'scram-sha-256';
ALTER ROLE alice PASSWORD 'NewStrongPass';
14. Dropping Role
REASSIGN OWNED BY alice TO app_owner;
DROP OWNED BY alice;
DROP ROLE alice;
15. Listing Roles
\du
SELECT rolname, rolsuper, rolcreatedb, rolcanlogin FROM pg_roles;
| Attribute | Effect |
|---|---|
| LOGIN | Can connect |
| SUPERUSER | Bypass all checks |
| CREATEDB / CREATEROLE | Specific powers |
| REPLICATION | Stream WAL |
| INHERIT | Auto-pick up granted role privileges |