I installed postgresql from source on Ubuntu 14.0.4. It is located in /usr/local/pgsql. At first, I created a data directory at /usr/local/pgsql/data and then ran

initdb -D /usr/local/pgsql/data

I noticed inside this directory was a postgresql.conf.

Later I decided I wanted to put the data directory in the /var directory, since it is variable data. So I created a directory at /var/local/postgresql/9.4.2/main (I guess I should have named it data, but when using the repositories it uses main and I decided to follow that). Then I ran initdb again but this time specifying a new data directory:

initdb -D /var/local/postgresql/9.4.2/main

And pretty much it created the same data files as it did before, including the postgresql.conf. This time I opened up the postgresql.conf at /var/local/postgresql/9.4.2/main and gave it a default data directory:

data_directory = '/var/local/postgresql/9.4.2/main'

Now, at this point I wanted to start the postmaster daemon but I want the daemon to read the data directory from /var/local/postgresql/9.4.2/main rather than me specifying it as a flag. Unfortunately, it doesn't work:

$ pg_ctl start
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more information.

How can I get this to work?

  • 2
    out of curiosity, why install from source? Postgres provide packages for 14.04 and 9.4 May 24, 2015 at 21:14
  • @JackDouglas wouldn't it be easier to upgrade in the future when installed from source? Or am I wrong? Is there any benefits from installing from source over the repositories? I already installed from repositories before. Now I was trying something different.
    – Donato
    May 24, 2015 at 22:34
  • 3
    I would have thought upgrading would be harder from source, but it depends on your skills I suppose (I assume you mean a major version upgrade). Are you planning to recompile every time there is a security fix? That's much easier using the repos, just apt-get upgrade.. May 25, 2015 at 6:33

1 Answer 1


I got this working without specifying database directory, but you do need to specify the configuration file, so that the pg_ctl binary will know which data directory to use. So for example:

pg_ctl -D /etc/postgresql/9.4.2/main start
  • 2
    .../9.4.2/...? That's very uncommon. Typically, the minor version would not be included, you are not going to move the DB dir with every minor upgrade, so just: .../9.4/... Mistakes like this one sneak in when "brewing your own", which is the best example for why the packages are useful. May 25, 2015 at 22:54
  • @Donato could you please accept your answer as the solution? This way the question wouldn't pop up from time to time as unanswered. Jan 5, 2016 at 9:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.