PostgreSQL Superuser: Create, Find, Upgrade with Examples

postgresql superuser

In PostgreSQL, user management is a vital aspect of database administration. Superusers are key elements of this process, with unparalleled access and control over the database. This article explores the concept of superusers, their creation, alteration, and management using PostgreSQL commands as well as pgAdmin, a popular PostgreSQL management tool. We’ll delve into how to change superuser passwords, find existing superusers, and handle these powerful roles responsibly to ensure a secure and efficient database environment. The skills you’ll acquire will be instrumental in your journey as a PostgreSQL database administrator.

How to Create a superuser in PostgreSQL

A superuser in PostgreSQL is a special type of user that overrides all access restrictions. Superusers can execute all commands and have all permissions without having to be explicitly granted them. This makes superusers a powerful tool, but they should be used sparingly and responsibly due to their potential to bypass security protections.

To create a superuser in PostgreSQL, you’ll use the CREATE ROLE or CREATE USER command with the SUPERUSER attribute. The CREATE USER command is a convenient alias for CREATE ROLE. Here’s the basic syntax:


Replace ‘username’ and ‘password’ with the username and password you want for your new superuser.

For instance, to create a new superuser named “admin” with the password “adminpassword”, the command would be:


The SUPERUSER attribute allows this role to bypass all permission checks, while the LOGIN attribute lets the role connect to a database, and PASSWORD sets the password for the role.

However, it’s important to note that because of the power and potential risk associated with superusers, they should be used judiciously. Avoid granting the superuser privilege unless it’s absolutely necessary, and always safeguard superuser account credentials to prevent unauthorized access.

In the event that you need to remove superuser privileges from a user, you can use the ALTER USER command:


For example, to remove superuser privileges from the “admin” user:


This command ensures that the specified user no longer has superuser privileges, adding an additional layer of security when necessary.

Update an Existing User to a superuser

Suppose you have a standard user and you need to grant this user superuser privileges. In PostgreSQL, this is achieved with the ALTER USER command in conjunction with the SUPERUSER attribute. Let’s go through the steps to perform this task.

See also  How to Enable PostgreSQL Performance Logging

The SUPERUSER attribute, when assigned to a PostgreSQL user, provides them with the ability to perform all administrative functions, regardless of any defined database privileges. A superuser can create and delete databases, add users, and perform all CRUD (Create, Read, Update, Delete) operations across all databases and tables. Essentially, the SUPERUSER attribute provides omnipotent control over the PostgreSQL environment.

To assign the SUPERUSER attribute to an existing user, the command is as follows:


Here, ‘username’ should be replaced with the name of the existing user that you want to make a superuser.

For instance, suppose we have an existing user named “john” and we want to grant john superuser privileges. The command to achieve this would be:


Executing this command would give John unrestricted access to all PostgreSQL databases and functions. John can now create and delete databases, create and delete users, and perform all CRUD operations across all tables and databases.

How to Change a superuser Password?

In PostgreSQL, changing a superuser password is a straightforward process that involves the use of the ALTER USER command. The superuser role in PostgreSQL is a powerful one, granting unrestricted privileges throughout the database. Therefore, maintaining the security of a superuser password is crucial.

To change the password of a superuser, you can use the following command:

ALTER USER superusername WITH PASSWORD 'newpassword';

In this command, replace ‘superusername’ with the name of the superuser and ‘newpassword’ with the new password.

For instance, suppose you have a superuser named ‘admin’ and you want to change the password to ‘newadminpassword’. The command to do this would be:

ALTER USER admin WITH PASSWORD 'newadminpassword';

This command will change the password for the ‘admin’ superuser to ‘newadminpassword’. It’s important to note that this command should be executed by another superuser or a user with the appropriate privileges.

Maintaining password hygiene is critical for security. Regularly updating the password and making sure it’s robust can help prevent unauthorized access. Never share a superuser password unless absolutely necessary and always ensure it’s stored securely.

Remember, superuser status is a potent tool in PostgreSQL, and it should be managed with utmost care. Regular updates to passwords, particularly for superuser roles, are a best practice and a significant part of maintaining a secure database environment.

Find and List superusers PostgreSQL

Finding superusers in PostgreSQL is a straightforward task that can be accomplished by querying the pg_roles system catalog. The pg_roles view contains information about database roles, including whether a role is a superuser.

See also  Postgres vs SQLite: Which Is Best For Your Use-Case?

To find superusers, you can use the following SQL query:

SELECT rolname FROM pg_roles WHERE rolsuper = 't';

The rolname field represents the role name, and rolsuper indicates if the role is a superuser. When rolsuper is ‘t’ (true), it means the role is a superuser.

Executing this query will return a list of all superusers in your PostgreSQL database. This can be handy when you need to audit superuser accounts or verify security configurations in your database environment.

Verifying Superuser Status

After you’ve altered a user’s role to be a superuser, it’s good practice to verify the user’s new status. You can use the following command to check the list of users and their attributes:


Executing \du in the PostgreSQL command line interface will display a list of all users, along with their attributes, including whether they are a superuser or not. In the list, you should see that the user John now has ‘Superuser’ listed as one of his attributes.

Caution and Best Practices

While the ability to make an existing user a superuser can be very useful in certain circumstances, this power should be used sparingly and responsibly. Always remember that superusers in PostgreSQL bypass all permission checks. This means that a superuser has the potential to cause significant damage to the database, either accidentally or maliciously. Therefore, it’s recommended to assign superuser privileges only when absolutely necessary and to users who are aware of the implications and responsibilities associated with these privileges.

Also, ensure the principle of least privilege is observed. This means granting only the minimum permissions necessary for a user to perform their role. If a user no longer needs superuser privileges, you can remove them by running:


In this example, John’s superuser status will be revoked, thus restricting his privileges back to the original state.

Restrict superuser Access by IP Address

In PostgreSQL, it’s not possible to directly restrict a superuser by IP address using SQL commands or role attributes. However, PostgreSQL’s host-based authentication mechanism allows you to control which IP addresses can connect to the database server, providing an indirect way to implement such restrictions.

This is done by editing the pg_hba.conf file, located in the data directory of your PostgreSQL installation. Here you can define rules specifying which hosts are allowed to connect, how clients are authenticated, and which PostgreSQL user names they can use.

For instance, if you want to restrict the superuser ‘admin’ to connect only from the IP address, you can add this line to the pg_hba.conf file:

host all admin md5

This rule allows the superuser ‘admin’ to connect to all databases from the IP address, and requires password authentication.

Remember to reload or restart the PostgreSQL service after editing the pg_hba.conf file to apply the changes.

Support us & keep this site free of annoying ads.
Shop or Donate with Paypal

Leave a Comment