How to manage users in PostgreSQL?

How to manage users in PostgreSQL?

PostgreSQL, an open-source object-relational database management system (ORDBMS), is a powerful tool for building applications and handling data. Effective user management is crucial in any PostgreSQL installation for optimizing performance, ensuring security, and facilitating seamless collaboration among team members.


Before we delve into the intricacies of user management, ensure that you meet the following requirements:

  • Software: PostgreSQL 9.x or higher installed on your machine
  • Hardware: At least 2GB RAM and 20GB of free disk space
  • Expertise Level: Basic familiarity with SQL commands and shell commands is assumed

Types of Users and Roles

In PostgreSQL, permissions and capabilities are managed through a concept called roles. Roles encapsulate a set of privileges that define what actions the user can take.

Built-in Roles

The primary built-in role is postgres, a superuser role created during the PostgreSQL installation. This role has full access to all databases and schemas, and should only be used for administrative tasks due to its elevated permissions.

Role Attributes

PostgreSQL allows fine-grained control through role attributes such as:

  • SUPERUSER: Can override all access restrictions
  • CREATEDB: Can create databases
  • CREATEROLE: Can create new roles

Setting Up the Environment

To start with, you need to install PostgreSQL on your system. Once installed, you can log in as the superuser postgres to start managing other users.

sudo -i -u postgres

User Creation

Creating users (also known as roles in PostgreSQL) is vital for managing access to your PostgreSQL instance. Users can be created through command-line methods or by using SQL queries.

Command-line Methods

You can create a new user using the CREATE USER SQL command within the PostgreSQL interactive terminal, or by using the createuser command-line utility.

CREATE USER username WITH PASSWORD 'password';

Or, alternatively, using createuser:

createuser --interactive --pwprompt

SQL Methods

The SQL method for creating users involves running a SQL CREATE USER query directly within the PostgreSQL database.


User Configuration

After creating users, you may need to update their configurations, such as changing passwords or granting/revoking privileges.

Setting Passwords

To update a user’s password, you can use the ALTER USER command or directly modify the pg_authid system catalog.

ALTER USER username WITH PASSWORD 'new_password';

Assigning/Revoking Privileges

To assign or revoke specific database privileges, use the GRANT and REVOKE commands.

GRANT SELECT ON table_name TO username;
REVOKE SELECT ON table_name FROM username;

User Deletion

Deleting a user in PostgreSQL should be approached with caution. Not only do you need to ensure that you’re removing the correct user, but you must also take into account any dependencies like ownership of databases, tables, or other objects. Use the DROP USER or DROP ROLE command to remove a user. However, before running these commands, make sure to transfer ownership or drop any dependent objects:

REASSIGN OWNED BY doomed_user TO new_user;
DROP USER doomed_user;

Role Inheritance and Groups

PostgreSQL’s flexible role-based access control allows you to manage permissions effectively. The concept of role inheritance allows a role to inherit permissions from another role. You can also group multiple roles into a single role, streamlining permission management.

Creating Role Groups

To create a role group, use the CREATE ROLE command and then assign individual roles to this group using GRANT:

CREATE ROLE readwrite;

Setting Role Hierarchies

Role hierarchies can be established using the INHERIT keyword when creating or altering a role:

CREATE ROLE junior_dev INHERIT IN ROLE readwrite;

Connection Limit and Timeout

Managing user connections is essential for database performance and security. PostgreSQL allows you to set both connection limits and session timeouts.

Setting Connection Limits

You can limit the number of concurrent connections a user can have by setting the CONNECTION LIMIT parameter during user creation:


Configuring Session Timeout

To configure a session timeout, you can adjust the idle_in_transaction_session_timeout setting in the postgresql.conf file:

idle_in_transaction_session_timeout = '5min'

User Auditing

Auditing is vital for tracking user activities and ensuring compliance. PostgreSQL provides various methods and tools to facilitate auditing.

Viewing User Login History

The pg_stat_activity view can be queried to track user login history:

SELECT * FROM pg_stat_activity WHERE usename = 'target_user';

Auditing Tools

pgAudit is an extension that provides detailed session and object audit logging. You can install it and configure it according to your auditing needs.

Advanced Features

PostgreSQL supports advanced user management features like Row-level Security (RLS) and Column-level Privileges.

Row-level Security

RLS allows you to set policies on individual rows in a table:

CREATE POLICY rls_policy ON my_table FOR SELECT USING (user_id = current_user);

Column-level Privileges

You can limit user access to specific columns using the GRANT command:

GRANT SELECT(column1, column2) ON TABLE my_table TO some_user;

Security Best Practices

Strong password policies and configuring your pg_hba.conf file for secure access methods like SSL are recommended practices for enhanced security.

Troubleshooting Common Issues

Common error messages like “permission denied” can often be resolved by carefully checking role memberships and inherited permissions.

Monitoring and Logs

Monitoring tools like pg_stat_statements and appropriate log settings in postgresql.conf can be invaluable for auditing and performance tuning.

Log Settings

To log user activity, set the log_statement parameter:

log_statement = 'all'

Monitoring Tools

pgAdmin and PostgreSQL Monitoring Suite are commonly used tools for monitoring user actions.


Managing users effectively in PostgreSQL involves understanding a plethora of features and settings. Attention to detail and continual monitoring are key.

Sharing is caring

Did you like what Mayank Sharma wrote? Thank them for their work by sharing it on social media.


No comments so far