28

I know that by default PostgreSQL listens on port 5432, but what is the command to actually determine PostgreSQL's port?

Configuration: Ubuntu 9.10 with PostgreSQL 8.4

voretaq7
  • 79,879
  • 17
  • 130
  • 214
Matthew Rankin
  • 1,175
  • 5
  • 15
  • 32

6 Answers6

41

lsof and nmap are solutions, but they're not installed by default. What you want is netstat(8).

sudo netstat -plunt |grep postgres

And if you don't have netstat, but have ss

sudo ss -pln |grep postgres
ptman
  • 28,394
  • 2
  • 30
  • 45
  • Linux is supposedly migrating away from route/ifconfig/netstat. The equivalent modern command is `ss -plung|grep postgres` (note, same flags) – ptman Feb 22 '17 at 12:11
  • 1
    There is no `g` flag anymore for the `ss` command. Try: `ss -pa |grep postgresql` – GrayedFox Jun 14 '18 at 08:06
  • 1
    @GrayedFox thanks for the update, but for me that gives the name of the port, not the number, so I think `ss -pan |grep postgres` is more suitable – ptman Jun 14 '18 at 12:58
  • `netstat` is not installed by default nowadays – Flimm May 11 '23 at 17:04
  • @Flimm indeed, the other comments point to `ss` – ptman May 12 '23 at 06:32
16

The PostgreSQL utility pg_lsclusters shows information about the configuration and status of all clusters, including the port number.

$ pg_lsclusters
Version Cluster   Port Status Owner    Data directory                     Log file
8.4     main      5433 online postgres /var/lib/postgresql/8.4/main       /var/log/postgresql/postgresql-8.4-main.log

This also has the advantage of not requiring 'sudo' privileges to run.

On Debian and Ubuntu systems, the pg_lsclusters command is provided by the package postgresql-common, which should be installed by default with the postgresql server.

Dan Stangel
  • 161
  • 1
  • 3
  • 5
    Note that `pg_lsclusters` is an Ubuntu-ism, and is *not* a standard Postgres command. It will work for this case, but is not a general-purpose solution... – voretaq7 Oct 11 '12 at 20:45
5

If you want to do it from inside the database, just do "SHOW port". But that assumes you've been able to connect to it, at least locally...

Magnus Hagander
  • 2,287
  • 15
  • 9
2

If you are searching on the local machine, I would use the lsof command to check for the port postgresql is using

lsof -p <postgres_process_id>
Dominik
  • 2,218
  • 14
  • 9
2

I have machines with multiple postgres instances running -- and so I also have the issue of trying to match up the correct database with each port. I tend to do:

$ ps aux | grep  postgres | grep -v 'postgres:'

And then, for each of instances returned look for the directory (-D argument) and:

$ sudo grep port $DIR/postgresql.conf
Joe H.
  • 1,917
  • 12
  • 13
1

Here's one solution that I've found:

sudo apt-get install nmap
sudo nmap localhost | grep postgresql

If you're wanting to search a non-local machine, just change localhost to the server's IP address.

Matthew Rankin
  • 1,175
  • 5
  • 15
  • 32