PostgreSQL or Postgres is a powerful object-relational high-performance database management system (ORDBMS) published under a flexible BSD-style license. PostgreSQL is well suited for large databases and has many advanced features.
In this tutorial, I will show you how to install and configure a PostgreSQL database server on FreeBSD. We will install the latest version of PostgreSQL 11 on the FreeBSD 12.0 system.
# Prerequisites
For this guide, we will use FreeBSD 12 with 2 GB of RAM memory and 2 CPUs. If you have a large deployment, you will need more than that. You will also need the root privileges for package installation.
# Update and Upgrade Packages
Firstly, we will update the packages repositories and upgrade all
packages to the latest version using the pkg
package management tool
for FreeBSD.
pkg update pkg upgrade
# Install PostgreSQL 11
In this step, we’re going to install the latest stable version PostgreSQL 11. By default, the FreeBSD repository provides multiple versions of PostgreSQL package. You can use the following command to check all available version of PostgreSQL packages.
pkg search postgresql
You will get multiple versions of PostgreSQL database server.
Now install the PostgreSQL 11 package using the command below.
pkg install postgresql11-server postgresql11-client
Next, we need to add the PostgreSQL service to the system boot and initialize the database before starting the service. Add the PostgreSQL to the system boot using the command below.
sysrc postgresql_enable=yes
Now initialize the PostgreSQL database, and then start the service, using the following commands
/usr/local/etc/rc.d/postgresql initdb service postgresql start service postgresql status
Verify the output of the last command gives a similar output:
root@bsdstation:/home/joe # service postgresql status pg_ctl: server is running (PID: 1122) /usr/local/bin/postgres "-D" "/var/db/postgres/data11"
The PostgreSQL service is up and running on FreeBSD 12.0. Additionally
you can check the system port used by the PostgreSQL service using the
sockstat command below. You should get the port 5432
is used by the
PostgreSQL service.
sockstat -l4 -P tcp
# Configure PostgreSQL Authentication
In this step, we’re going to set up the authentication method for
PostgreSQL. PostgreSQL supports different authentication methods such as
trust authentication (default), password-based authentication, Kerberos,
GSSAPI, LDAP, RADIUS, and PAM. For this guide, we’re going to set up the
password-based authentication using MD5. Go to the
/var/db/postgresql/data11
directory, edit the pg_hba.conf
file using
a text editor.
cd /var/db/postgres/data11
vi pg_hba.conf
Now change the authentication method for all local connection to md5
as below, and add a line to allow external access to the database if
needed.
# 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 # External connections host all all 192.168.66.1/32 md5
Save and close the file, and then restart the PostgreSQL service,
enabling the password-based authentication using md5
for the
PostgreSQL server.
service postgresql restart
# Setup New User and Database
In this step, we’re going to set up a new user and database on
PostgreSQL. We’re going to create a new password for default user
postgres
, and create a new user and database. Log in to the ’postgres’
user using the command below.
su - postgres
Now login to the interactive PostgreSQL shell psql
.
psql
Then create a new password for the postgres
user.
\password postgres TYPE THE PASSWORD
Next, we will create a new user called joe
with the database joe_db
.
And the give privileges for the user to the database by running the
following queries.
CREATE DATABASE joe_db; CREATE USER joe WITH ENCRYPTED PASSWORD 'password123#'; GRANT ALL PRIVILEGES ON DATABASE joe_db TO joe;
You can now exit from the PostgreSQL interactive shell with \q
. As a
result, the password for the default postgres
user has been created.
And the new user and database have been set up.
# Testing connection
Log in to the postgres
user and then run the psql
command to get
into the PostgreSQL interactive shell.
su - postgres psql
Show list users and database on the PostgreSQL server using the
following queries. You will get the new user joe
and the database
joe_db
on the result.
\du \l
Type \q
to exit from the psql shell. Next, we will log in using the
created user joe
to the database joe_db
using the command below.
psql -U joe -d joe_db -W
Type the joe
password to continue. Now we will proceed to create a new
table user_table
and insert some data into it.
CREATE TABLE user_table (id INT, name TEXT, site TEXT); INSERT INTO user_table (id, name, site) VALUES ( 1 , 'Joe the Man', 'jjbigorra.netlify.app');
Show content of tables using the following query.
SELECT * FROM user_table;
Finally, the installation and configuration of PostgreSQL 11 on the FreeBSD 12.0 system has been completed successfully.