pg.ddx.io  pgsql-admin@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Mike Lonergan <mikethecanuck@gmail.com>
Cc: pgsql-admin@lists.postgresql.org
Subject: Re: What is the accepted practice to automate initdb (PostgreSQL 9.6) to a non-default directory?
Date: Fri, 02 Mar 2018 12:14:49 -0500
Message-ID: <31668.1520010889@sss.pgh.pa.us> (raw)
In-Reply-To: <CAEzHCEPibAGQSomzGHSr5M0VKD36v4jpPtwO6SppNpzE6FT=yQ@mail.gmail.com>
References: <CAEzHCEPibAGQSomzGHSr5M0VKD36v4jpPtwO6SppNpzE6FT=yQ@mail.gmail.com>

Mike Lonergan <mikethecanuck@gmail.com> writes:
> The internet has the following pattern documented in many places (with
> varying install locations for "initdb", but always the same command)
> through at least PostgreSQL 9.3:
> sudo -u postgres postgres /opt/pg/bin/initdb -D /data/

> However while this command can complete successfully (which is encouraging,
> as it's still documented in the 9.6 docs
> <https://www.postgresql.org/docs/9.6/static/app-initdb.html;), running sudo
> postgresql service start results in:

> Redirecting to /bin/systemctl start postgresql.service
> Job for postgresql.service failed because the control process exited
> with error code. See "systemctl status postgresql.service" and
> "journalctl -xe" for details.

Evidently you're relying on somebody's systemd unit script to launch
Postgres.  Almost certainly, that unit script has the location of the
data directory hard-wired into it.  If you want to use a non-default
directory location, you'll have to change the unit script (and possibly
then mutter some incantation to get systemd to notice you've changed
it; I've not worked with systemd in awhile so I forget).

> The recommended command "postgresql-setup --initdb" doesn't seem to accept
> -D or --pgdata parameters, so that seems a non-starter for my scenario.

While it's certainly possible to use a manual invocation of initdb
to get things going, when your distro provides a wrapper like
postgresql-setup you're better off using that, because it's certain
to get the data directory location, ownership, etc set up the way
the launch script expects.  The reason there's no -D option is that
it scrapes the datadir location out of the launch script; again,
you *must* change that script if you're going to use this launch
method.

> I've seen various unofficial solutions that use various combinations of
> manual setup and hand-editing of .conf files, and I'm trying hard to avoid
> that so that my ops team can build and rebuild this server in an emergency
> situation without any special knowledge of the behaviour of PostgreSQL or
> its tools.

If that's what you're striving for, then the very first recommendation
would be to *not* use a non-default data dir location, but just go along
with what the distro wants to do out-of-the-box.  You're just adding
another layer of complexity and things-to-go-wrong.  (An example of
the sort of thing I'm worried about is that you're likely also going to
need to have a conversation with SELinux about whether the postgres
daemon is allowed to use files in the nonstandard location.  It's doable,
certainly, but it's one more thing to configure.)

			regards, tom lane




view thread (7+ messages)  latest in thread

Message-ID: <31668.1520010889@sss.pgh.pa.us>
Permalink:  ../31668.1520010889@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/31668.1520010889@sss.pgh.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-admin@postgresql.org
  Cc: tgl@sss.pgh.pa.us, mikethecanuck@gmail.com, pgsql-admin@lists.postgresql.org
  Subject: Re: What is the accepted practice to automate initdb (PostgreSQL 9.6) to a non-default directory?
  In-Reply-To: <31668.1520010889@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox