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;
AttributeEffect
LOGINCan connect
SUPERUSERBypass all checks
CREATEDB / CREATEROLESpecific powers
REPLICATIONStream WAL
INHERITAuto-pick up granted role privileges