[blfs-dev] postgresql, and policy

Bruce Dubbs bruce.dubbs at gmail.com
Thu Sep 12 13:04:57 PDT 2013

Ken Moffat wrote:
>   I've now got the postgresql testsuite working for a normal user,
> using the attached patch (based on gentoo, but simplified - they
> make one other change, which seems unnecessary, and use @SOCKETDIR@
> then sed that to /tmp after applying the patch.
>   Bruce managed to get the tests working after su'ing to user
> postgres, but that doesn't work for me (details in the ticket).
>   This is all because we now move the socket (and lock file) from
> /tmp to /run/postgresql.  We do that with a sed, but using sed on
> the first of the test files is likely to be error prone (a lot of
> other SYSTEMQUOTE lines don't get changed), so I'm inclined to
> patch. Which begs the question - should I convert the sed to a patch
> and include it all together, as e.g. -use_run- or leave this patch
> separate ?

I don't think the patch is necessary.  There are several places in the 
section already that use su - postgres -c 'command'.  this is what I 

As the root user:

groupadd -g 41 postgres &&
useradd -c "PostgreSQL Server" -g postgres -d /srv/pgsql/data \
         -u 41 postgres &&

install -v -dm700 /srv/pgsql/data &&
install -v -dm755 /run/postgresql &&
chown -Rv postgres:postgres /srv/pgsql /run/postgresql

Now proceed as a normal user (note different sed):

sed -i -e '/DEFAULT_PGSOCKET_DIR/s at tmp@run/postgresql@' \
     src/include/pg_config_manual.h &&

./configure --prefix=/usr          \
             --enable-thread-safety \
             --docdir=/usr/share/doc/postgresql-9.2.4 &&

To test the results, as the root user:
su postgres -c 'make check'

Now install as the root user:
make install &&
make install-docs

Initialize a database cluster with the following command issued by the 
root user:

su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

Again as the root user, start the database server with the following 

su - postgres -c '/usr/bin/postmaster -D /srv/pgsql/data > \
     /srv/pgsql/data/logfile 2>&1 &'

Still as user root, create a database and verify the installation:

su - postgres -c '/usr/bin/createdb test' &&

echo "create table t1 ( name varchar(20), location varchar(20) );" |
     (su - postgres -c '/usr/bin/psql test ') &&

echo "insert into t1 values ('Billy', 'NewYork');" |
     (su - postgres -c '/usr/bin/psql test ') &&

echo "insert into t1 values ('Evanidus', 'Quebec');" |
     (su - postgres -c '/usr/bin/psql test ') &&

echo "insert into t1 values ('Jesse', 'Ontario');" |
     (su - postgres -c '/usr/bin/psql test ') &&

echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

We probably need a command to shut down the db server at this point. 
Possibly su - postgres -c '/usr/bin/dropdb test' &&
killall postmaster

I see that postmaster is deprecated in favor of postgres.

Note that the pipe (|) does not require escaping a new line if its last 
on the line.

   -- Bruce

More information about the blfs-dev mailing list