Coder Perfect

How can I use a Linux script to see if PostgreSQL is installed or not?


I’d want to check whether PostgreSQL is installed on Linux in a script and publish the result. Any ideas on how to go about doing the check?

Asked by Nirmal- thInk beYond

Solution #1

Why don’t you try the which command?

There appears to be no output if you run which psql and Postgres is not installed. The terminal prompt is now ready to take another command:

> which psql

However, if Postgres is installed, you’ll get a response that includes the path to the Postgres installation:

> which psql

Looking at man, there looks to be another alternative that could assist you:

-s      No output, just return 0 if any of the executables are found, or
        1 if none are found.

So, as long as your scripting language can execute a terminal command, you should be able to send which -s psql and utilize the return value to see if Postgres is installed. You can then print the result in whatever way you like.

Because I have Postgres installed on my machine, I perform the commands below.

> which -s psql
> echo $?

this indicates that the command returned 0 and that the Postgres executable was discovered on my PC.

Here’s what you need to know about echo $.

Answered by campo

Solution #2

We can write simply:

psql --version

output show like:

psql (PostgreSQL) 11.5 (Ubuntu 11.5-1.pgdg18.04+1)

Answered by Chandan Sharma

Solution #3

If it’s based on Debian.

aptitude show postgresql | grep State

But I suppose you could just run it with a flag like —version, which simply prints some information and exits.

“service postgres status” was used to update the information. Try:

service postgres status
if [ "$?" -gt "0" ]; then
  echo "Not installed".
  echo "Intalled"

Answered by Draco Ater

Solution #4

There is no easy method to accomplish this. All you can do is use a package manager (rpm, dpkg) or look for the files you need in some likely locations. Alternatively, connect to a plausible port (5432) and observe if a PostgreSQL protocol answer is sent. But none of this will be really durable. It’s possible that you might rethink your needs.

Answered by Peter Eisentraut

Solution #5

Because PostgreSQL can be installed and configured in a variety of ways, there is no single simple way to accomplish it.

You can’t count on psql to be on your PATH. You can’t rely on the system having only one psql (multiple versions might be installed in different ways). You can’t do it based on port because there’s no guarantee it’ll be on port 5432 or that numerous versions won’t exist.

Prompt and question the user.

Answered by Craig Ringer

Post is based on