How To Install and Use PostgreSQL on Ubuntu 18.04

A earlier model of this tutorial was written by Justin Ellingwood.


Relational database administration methods are a key part of many internet sites and purposes. They supply a structured technique to retailer, manage, and entry data.

PostgreSQL, or Postgres, is a relational database administration system that gives an implementation of the SQL querying language. It’s a widespread selection for a lot of small and enormous tasks and has the benefit of being standards-compliant and having many superior options like dependable transactions and concurrency with out learn locks.

This information demonstrates the right way to set up Postgres on an Ubuntu 18.04 VPS occasion and in addition offers directions for primary database administration.


To observe together with this tutorial, you have to one Ubuntu 18.04 server that has been configured by following our Preliminary Server Setup for Ubuntu 18.04 information. After finishing this prerequisite tutorial, your server ought to have a non-root person with sudo permissions and a primary firewall.

Putting in PostgreSQL

Ubuntu’s default repositories include Postgres packages, so you’ll be able to set up these utilizing the apt packaging system.

Since that is your first time utilizing apt on this session, refresh your native package deal index. Then, set up the Postgres package deal together with a -contrib package deal that provides some extra utilities and performance:

  • sudo apt replace
  • sudo apt set up postgresql postgresql-contrib

Now that the software program is put in, we will go over the way it works and the way it could also be totally different from related database administration methods you will have used.

Utilizing PostgreSQL Roles and Databases

By default, Postgres makes use of an idea known as “roles” to deal with in authentication and authorization. These are, in some methods, much like common Unix-style accounts, however Postgres doesn’t distinguish between customers and teams and as an alternative prefers the extra versatile time period “role”.

Upon set up, Postgres is ready up to make use of ident authentication, which means that it associates Postgres roles with an identical Unix/Linux system account. If a job exists inside Postgres, a Unix/Linux username with the identical identify is ready to sign up as that function.

The set up process created a person account known as postgres that’s related to the default Postgres function. With the intention to use Postgres, you’ll be able to log into that account.

There are a couple of methods to make the most of this account to entry Postgres.

Switching Over to the postgres Account

Swap over to the postgres account in your server by typing:

Now you can entry a Postgres immediate instantly by typing:

This may log you into the PostgreSQL immediate, and from right here you're free to work together with the database administration system straight away.

Exit out of the PostgreSQL immediate by typing:

This may carry you again to the postgres Linux command immediate.

Accessing a Postgres Immediate With out Switching Accounts

You can too run the command you want with the postgres account immediately with sudo.

For example, within the final instance, you have been instructed to get to the Postgres immediate by first switching to the postgres person after which operating psql to open the Postgres immediate. You would do that in a single step by operating the one command psql because the postgres person with sudo, like this:

This may log you immediately into Postgres with out the middleman bash shell in between.

Once more, you'll be able to exit the interactive Postgres session by typing:

Many use circumstances require a couple of Postgres function. Learn on to discover ways to configure these.

Making a New Function

Presently, you simply have the postgres function configured throughout the database. You'll be able to create new roles from the command line with the createrole command. The --interactive flag will immediate you for the identify of the brand new function and in addition ask whether or not it ought to have superuser permissions.

If you're logged in because the postgres account, you'll be able to create a brand new person by typing:

If, as an alternative, you favor to make use of sudo for every command with out switching out of your regular account, sort:

  • sudo -u postgres createuser --interactive

The script will immediate you with some decisions and, based mostly in your responses, execute the right Postgres instructions to create a person to your specs.


Enter identify of function so as to add: sammy Shall the brand new function be a superuser? (y/n) y

You will get extra management by spending some extra flags. Take a look at the choices by wanting on the man web page:

Your set up of Postgres now has a brand new person, however you haven't but added any databases. The subsequent part describes this course of.

Making a New Database

One other assumption that the Postgres authentication system makes by default is that for any function used to log in, that function could have a database with the identical identify which it might entry.

Which means, if the person you created within the final part is named sammy, that function will try to hook up with a database which can also be known as “sammy” by default. You'll be able to create the suitable database with the createdb command.

If you're logged in because the postgres account, you'd sort one thing like:

If, as an alternative, you favor to make use of sudo for every command with out switching out of your regular account, you'd sort:

  • sudo -u postgres createdb sammy

This flexibility offers a number of paths for creating databases as wanted.

Opening a Postgres Immediate with the New Function

To log in with ident based mostly authentication, you will want a Linux person with the identical identify as your Postgres function and database.

If you do not have an identical Linux person accessible, you'll be able to create one with the adduser command. You'll have to do that out of your non-root account with sudo privileges (which means, not logged in because the postgres person):

As soon as this new account is on the market, you'll be able to both swap over and hook up with the database by typing:

Or, you are able to do this inline:

This command will log you in routinely, assuming that the entire elements have been correctly configured.

In order for you your person to hook up with a distinct database, you are able to do so by specifying the database like this:

As soon as logged in, you will get examine your present connection data by typing:


You might be related to database "sammy" as person "sammy" by way of socket in "/var/run/postgresql" at port "5432".

That is helpful in case you are connecting to non-default databases or with non-default customers.

Creating and Deleting Tables

Now that you know the way to hook up with the PostgreSQL database system, you'll be able to be taught some primary Postgres administration duties.

First, create a desk to retailer some information. For instance, a desk that describes some playground tools.

The fundamental syntax for this command is as follows:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)

As you'll be able to see, these instructions give the desk a reputation, after which outline the columns in addition to the column sort and the max size of the sector information. You can too optionally add desk constraints for every column.

You'll be able to be taught extra about the right way to create and handle tables in Postgres right here.

For demonstration functions, create a easy desk like this:

CREATE TABLE playground (
    equip_id serial PRIMARY KEY,
    sort varchar (50) NOT NULL,
    colour varchar (25) NOT NULL,
    location varchar(25) examine (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
    install_date date

These instructions will create a desk that inventories playground tools. This begins with an tools ID, which is of the serial sort. This information sort is an auto-incrementing integer. You’ve additionally given this column the constraint of major key which signifies that the values should be distinctive and never null.

For 2 of the columns (equip_id and install_date), the instructions don't specify a discipline size. It's because some column varieties do not require a set size as a result of the size is implied by the kind.

The subsequent two instructions create columns for the tools sort and colour respectively, every of which can't be empty. The command after these creates a location column and create a constraint that requires the worth to be considered one of eight doable values. The final command creates a date column that information the date on which you put in the tools.

You'll be able to see your new desk by typing:


Listing of relations Schema | Title | Kind | Proprietor --------+-------------------------+----------+------- public | playground | desk | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

Your playground desk is right here, however there’s additionally one thing known as playground_equip_id_seq that's of the kind sequence. It is a illustration of the serial sort which you gave your equip_id column. This retains observe of the following quantity within the sequence and is created routinely for columns of this kind.

If you wish to see simply the desk with out the sequence, you'll be able to sort:


Listing of relations Schema | Title | Kind | Proprietor --------+------------+-------+------- public | playground | desk | sammy (1 row)

Including, Querying, and Deleting Information in a Desk

Now that you've got a desk, you'll be able to insert some information into it.

For instance, add a slide and a swing by calling the desk you need to add to, naming the columns after which offering information for every column, like this:

  • INSERT INTO playground (sort, colour, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  • INSERT INTO playground (sort, colour, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

It's best to take care when getting into the information to keep away from a couple of widespread hangups. For one, don't wrap the column names in citation marks, however the column values that you just enter do want quotes.

One other factor to remember is that you don't enter a price for the equip_id column. It's because that is routinely generated every time a brand new row within the desk is created.

Retrieve the knowledge you have added by typing:

  • SELECT * FROM playground;


equip_id | sort | colour | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

Right here, you'll be able to see that your equip_id has been crammed in efficiently and that all your different information has been organized appropriately.

If the slide on the playground breaks and you must take away it, you may also take away the row out of your desk by typing:

  • DELETE FROM playground WHERE sort = 'slide';

Question the desk once more:

  • SELECT * FROM playground;


equip_id | sort | colour | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

You discover that your slide is not part of the desk.

Including and Deleting Columns from a Desk

After making a desk, you'll be able to modify it so as to add or take away columns comparatively simply. Add a column to point out the final upkeep go to for each bit of kit by typing:

  • ALTER TABLE playground ADD last_maint date;

In case you view your desk data once more, you will notice the brand new column has been added (however no information has been entered):

  • SELECT * FROM playground;


equip_id | sort | colour | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

Deleting a column is simply as easy. In case you discover that your work crew makes use of a separate instrument to maintain observe of upkeep historical past, you'll be able to delete of the column by typing:

  • ALTER TABLE playground DROP last_maint;

This deletes the last_maint column and any values discovered inside it, however leaves all the opposite information intact.

Updating Information in a Desk

Up to now, you’ve realized the right way to add information to a desk and the right way to delete them, however this tutorial hasn’t but lined the right way to modify current entries.

You'll be able to replace the values of an current entry by querying for the document you need and setting the column to the worth you want to use. You'll be able to question for the "swing" document (this may match each swing in your desk) and alter its colour to "red". This might be helpful in the event you gave the swing set a paint job:

  • UPDATE playground SET colour = 'purple' WHERE sort = 'swing';

You'll be able to confirm that the operation was profitable by querying the information once more:

  • SELECT * FROM playground;


equip_id | sort | colour | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | purple | northwest | 2010-08-16 (1 row)

As you'll be able to see, your slide is now registered as being purple.


You at the moment are arrange with PostgreSQL in your Ubuntu 18.04 server. Nevertheless, there's nonetheless a lot extra to be taught with Postgres. Listed here are some extra guides that cowl the right way to use Postgres:

Google Information to be revamped, incorporate YouTube movies and magazines

Previous article

Ubuntu 18.04 (LTS) LAMP server tutorial with Apache, PHP 7.2, and MySQL

Next article

You may also like


Leave a Reply

More in Linux