PostgreSQL is an open-source, high-performance database management system suitable for large databases. It is used as a data store for mobile, geospatial, web, and analytics applications. It is cross-platform, offers complex data types, and supports Java, Python, Perl, Ruby, Go, C, C#, and many more languages. It can handle complex workloads while maintaining data integrity and reliability.

Step 1 – Install PostgreSQL

By default, the PostgreSQL package is included in the FreeBSD official repository. You can search all available PostgreSQL packages using the following command.

pkg search postgresql

You will see the following list:

postgresql15-server-15.4       PostgreSQL is the most advanced open-source database available anywhere
postgresql15-tds_fdw-2.0.3     PostgreSQL foreign data wrapper to connect to TDS databases
postgresql15-zhparser-2.2      PostgreSQL extension for full-text search of Chinese
postgresql16-client-16.0       PostgreSQL database (client)
postgresql16-contrib-16.0      The contrib utilities from the PostgreSQL distribution
postgresql16-docs-16.0         The PostgreSQL documentation set
postgresql16-plperl-16.0       Write SQL functions for PostgreSQL using Perl5
postgresql16-plpython-16.0     Module for using Python to write SQL functions
postgresql16-pltcl-16.0        Module for using Tcl to write SQL functions
postgresql16-server-16.0       PostgreSQL is the most advanced open-source database available anywhere
prometheus-postgresql-adapter-0.6.0_14 Use PostgreSQL as a remote storage database for Prometheus
py39-postgresql-1.3.0          Python 3 compatible PostgreSQL database driver and tools
rubygem-azure_mgmt_postgresql-0.17.2 Microsoft Azure PostgreSQL Client Library for Ruby

Now, install the PostgreSQL server and client package using the following command:

pkg install postgresql16-server postgresql16-client nano-7.2

Once both packages are installed, enable the PostgreSQL service to start at system reboot.

sysrc postgresql_enable=yes

Next, initialize the PostgreSQL database with the following command:

/usr/local/etc/rc.d/postgresql initdb

Output:

creating directory /var/db/postgres/data16 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Next, start the PostgreSQL service.

service postgresql start

You can verify the PostgreSQL service status using the following command:

service postgresql status

By default, PostgreSQL listens on port 5432. You can check it with the following command:

sockstat -l4 -P tcp

Output:

USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
postgres postgres   2870  7  tcp4   127.0.0.1:5432        *:*

Step 2 – Configure PostgreSQL Authentication

By default, PostgreSQL supports different authentication methods such as md5, RADIUS, PAM, LDAP, and more. In this section, we will set up the password-based authentication using MD5.

First, edit the PostgreSQL configuration file.

nano /var/db/postgres/data16/pg_hba.conf

Find and change the following lines from trust to md5:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Save and close the file, then restart the PostgreSQL service to apply the changes.

service postgresql restart

Step 3 – Create a User and Database in PostgreSQL

First, connect to the Postgres with the following command:

su - postgres
psql

Next, set the password for the default postgres user.

\password postgres

Next, create a new database named testdb and a user named testuser.

create database testdb;
create user testuser with encrypted password 'password';

Next, grant all the privileges on testdb database to testuser.

grant all privileges on database testdb to testuser;

Next, verify your created users using the following command:

\du

Output:

                             List of roles
 Role name |                         Attributes                         
-----------+------------------------------------------------------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS
 testuser  | 

Next, create a table named mytable with the following command:

create table mytable (id int, name text, site text);

Next, insert some data into the table.

insert into mytable (id,name,site) values (1,'myserver','atlantic.net');

Next, retrieve the data from your table.

select * from mytable;

Output:

 id |   name   |     site     
----+----------+--------------
  1 | myserver | atlantic.net
(1 row)

You can now exit from the PostgreSQL shell with the following command.

\q

Conclusion

In this post, we explained how to install PostgreSQL on FreeBSD. We also showed you how to create a database, user, and table in PostgreSQL. You can now easily use PostgreSQL as a database backend for your application. Try deploying a PostgreSQL server on dedicated server hosting from Atlantic.Net!