---
Classes:
  - IT Foundations
---

# Postgresql
Postgresql is a popular open-source relational database, and is widely available on Linux.

**Note:** A graphical interface for postgresql is something that will need to be installed separately, the only way to interact with the database that is installed by default is the `psql` command. To install the pgAdmin GUI program see [pgAdmin](#pgadmin) below.

## Install
All linux distributions package postgresql and you can just install the relevant package. Some common examples are below:

### Arch
```sh
sudo pacman -S postgresql

# Initialise Server Data
sudo -u postgres initdb -D '/var/lib/postgres/data'
```

### Debian/Mint/Ubuntu
```sh
sudo apt install postgresql
```

### Fedora
```sh
sudo dnf install postgresql-server

# Initialise Server Data
sudo /usr/bin/postgresql-setup --initdb
```

Edit database access config
```sh
sudo nano /var/lib/pgsql/data/pg_hba.conf
```

Find these lines:
```sh
# IPv4 local connections:
host  all  all  127.0.0.1/32  ident
# IPv6 local connections:
host  all  all ::1/128  ident
```

Make sure the last item on each line (in this case `ident`) is changed to `md5`. Then restarted the database `sudo systemctl restart postgresql.service`

### Podman (Universal)
Podman is a container system very similar to docker that lets you run programs in an isolated and self-contained environment. 

First install [Podman](../Tools/Podman.md) on your computer.

The container image will automatically be downloaded when you run postgres database with:
```sh
podman run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword docker.io/library/postgres:latest
```

Checkout the [Podman document](../Tools/Podman.md) to learn how to manage containers.

**Note:** You can skip the Setup stage below, it is already setup inside the container

## Setup
First make sure postgres is running:
```sh
systemctl status postgresql.service
```

If not, start it with:
```sh
sudo systemctl start postgresql.service
```

If you want it to start on boot, you can enable it with:
```sh
sudo systemctl enable postgresql.service
```

To stop it from starting on boot, replace enable with disable.

Initially the postgres database user will not have a password to allow access. To access the database run the following:
```sh
sudo -u postgres psql
```

From here you can do initial setup.

For a simple setup where you just want to access from a client like pgAdmin, you can set a password for the `postgres` user with the following query:
```sql
ALTER USER postgres WITH PASSWORD 'new_password';
```

When done you can exit with the `\q` command.

# pgAdmin
pgAdmin is a graphical interface to configure and query postgresql.

## Install
Most linux distributions don't include pgAdmin from their default repositories, but we can either use pgAdmin's official repositories, or it is available as a flatpak:

### Flatpak (universal)
If you wish to install through flatpak ensure flatpak is setup, see [Flatpak](../Tools/Flatpak.md) for details if not.

If you have a graphical software manager/store it should be available there, to install via command-line:
```sh
flatpak install org.pgadmin.pgadmin4
```

### Arch (AUR Package)
```sh
yay -S pgadmin4-server-bin pgadmin4-desktop-bin
```

### Debian/Ubuntu
```sh
# Install the public key for the repository (if not done previously):
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg

# Create the repository configuration file:
echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" | sudo tee /etc/apt/sources.list.d/pgadmin4.list

# Refresh package list
sudo apt update

# Install pgAdmin
sudo apt install pgadmin4-desktop
```

### Fedora

Note: You will be prompted to import the required signing keys

```sh
# Add the pgadmin repository
sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-fedora-repo-2-1.noarch.rpm

# Install pgAdmin
sudo dnf install pgadmin4-desktop
```

### Linux Mint
```sh
# Install the public key for the repository (if not done previously):
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg

# Create the repository configuration file:
echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble pgadmin4 main" | sudo tee /etc/apt/sources.list.d/pgadmin4.list

# Refresh package list
sudo apt update

# Install pgAdmin
sudo apt install pgadmin4-desktop
```

## Setup
### Initial Setup
First you will need to register your running server:

![Register Server](Screenshots/psql-register-server.png)

In the General tab enter a name for your postgres server, then in the connection tab enter `localhost` for Hostname/address and enter the password for the postgres user:

![Postgres Connection](Screenshots/psql-connection.png)

Now click save and pgAdmin should be ready to use as normal!

### PSQL Tool Setup
You may need to point pgAdmin to your binary path, so that it knows where to find the `psql` tool.

In File -> Preferences, under "Binary paths", in the "PostgeSQL Binary Path" put `/usr/bin` for the version of postgres install, and click the Validate button (Clipboard with a checkmark) to ensure it works.

![Binary Path Selection](Screenshots/psql-binary-path.png)

Click the Save button in the top left, and the PSQL tool should now function.
