Despite my best efforts I have not been able to get PostgreSQL to start at boot time, and I cannot work out why. I'm running PostgreSQL 8.3.16_2 on FreeBSD 9.0-RELEASE [actually PC-BSD Isotope] and I installed PostgreSQL during the system installation [IE not myself]. My goal was to install and set up OpenERP, using PostgreSQL as my database.
I am able to start the database server [manually], apache [at boot], the OpenERP server and finally the OpenERP web client [both manually - as I can't start them before the database server anyway]. However, I am unable to get PostgreSQL to start at boot. I have done the following:
So far so good. However, I am unable to start the service in the background with a logfile with the command above or the following [as user "postgres"]:
It says something like "cannot create logfile: access denied." [Can't run the command right now to see exactly what it says].
The command
gives me the following:
So I'm pretty sure "postgres" should have permissions to do this. Any ideas what I'm doing wrong?
But my major problem is that I can't get PostgreSQL to load at boot. I have done the following, as required:
I have also added the "freebsd" start script to
as instructed. Tthe contents of that file are as follows [I haven't edited it]:
What have I missed?
I am able to start the database server [manually], apache [at boot], the OpenERP server and finally the OpenERP web client [both manually - as I can't start them before the database server anyway]. However, I am unable to get PostgreSQL to start at boot. I have done the following:
Code:
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
So far so good. However, I am unable to start the service in the background with a logfile with the command above or the following [as user "postgres"]:
Code:
pg_ctl start -l logfile
It says something like "cannot create logfile: access denied." [Can't run the command right now to see exactly what it says].
The command
Code:
$ ls -l /usr/local/pgsql/data
gives me the following:
Code:
total 76
-rw------- 1 postgres pgsql 4 Feb 9 11:07 PG_VERSION
drwx------ 9 postgres pgsql 512 Feb 22 13:37 base
drwx------ 2 postgres pgsql 1024 Feb 22 14:16 global
-rw-r--r-- 1 postgres pgsql 20 Feb 16 13:09 logfile
drwx------ 2 postgres pgsql 512 Feb 9 11:07 pg_clog
-rw------- 1 postgres pgsql 3431 Feb 19 20:19 pg_hba.conf
-rw------- 1 postgres pgsql 1460 Feb 9 11:07 pg_ident.conf
drwx------ 4 postgres pgsql 512 Feb 9 11:07 pg_multixact
drwx------ 2 postgres pgsql 512 Feb 9 11:07 pg_subtrans
drwx------ 2 postgres pgsql 512 Feb 9 11:07 pg_tblspc
drwx------ 2 postgres pgsql 512 Feb 9 11:07 pg_twophase
drwx------ 3 postgres pgsql 512 Feb 22 14:04 pg_xlog
-rw------- 1 postgres pgsql 16860 Feb 19 20:13 postgresql.conf
-rw------- 1 postgres pgsql 53 Feb 22 13:30 postmaster.opts
-rw------- 1 postgres pgsql 48 Feb 22 13:30 postmaster.pid
So I'm pretty sure "postgres" should have permissions to do this. Any ideas what I'm doing wrong?
But my major problem is that I can't get PostgreSQL to load at boot. I have done the following, as required:
Code:
# echo 'postgresql_enable="YES"' >> /etc/rc.conf
I have also added the "freebsd" start script to
Code:
/usr/local/etc/rc.d/postgresql
Code:
$ cat /usr/local/etc/rc.d/postgresql
#! /bin/sh
# PostgreSQL boot time startup script for FreeBSD. Copy this file to
# /usr/local/etc/rc.d/postgresql.
# Created through merger of the Linux start script by Ryan Kirkpatrick
# and the script in the FreeBSD ports collection.
# $PostgreSQL: pgsql/contrib/start-scripts/freebsd,v 1.4 2004/10/01 18:30:21 tgl Exp $
## EDIT FROM HERE
# Installation prefix
prefix=/usr/local/pgsql
# Data directory
PGDATA="/usr/local/pgsql/data"
# Who to run the postmaster as, usually "postgres". (NOT "root")
PGUSER=postgres
# Where to keep a log file
PGLOG="$PGDATA/serverlog"
## STOP EDITING HERE
# The path that is to be used for the script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# What to use to start up the postmaster (we do NOT use pg_ctl for this,
# as it adds no value and can cause the postmaster to misrecognize a stale
# lock file)
DAEMON="$prefix/bin/postmaster"
# What to use to shut down the postmaster
PGCTL="$prefix/bin/pg_ctl"
# Only start if we can find the postmaster.
test -x "$DAEMON" || exit 0
case $1 in
start)
su -l $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
echo -n ' postgresql'
;;
stop)
su -l $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"
;;
restart)
su -l $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"
su -l $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
;;
status)
su -l $PGUSER -c "$PGCTL status -D '$PGDATA'"
;;
*)
# Print help
echo "Usage: `basename $0` {start|stop|restart|status}" 1>&2
exit 1
;;
esac
exit 0
What have I missed?