#! /bin/sh
# chkconfig: 2345 51 49
# description: PostgreSQL RDBMS
### BEGIN INIT INFO
# Provides: postgresql
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Should-Start: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: PostgreSQL RDBMS
# Description: PostgreSQL RDBMS
# X-Start-Before:
# X-Stop-After:
# X-Timesys-Start-Number:  49
# X-Timesys-Stop-Number:  51
### END INIT INFO

## EDIT FROM HERE

# Installation prefix
prefix=/usr

# Data directory
PGDATA="/var/pgsql/data"

# Who to run the postmaster as, usually "postgres".  (NOT "root")
PGUSER=postgres

# Where to keep a log file
PGLOG="$PGDATA/serverlog"

# It's often a good idea to protect the postmaster from being killed by the
# OOM killer (which will tend to preferentially kill the postmaster because
# of the way it accounts for shared memory).  Setting the OOM_ADJ value to
# -17 will disable OOM kill altogether.  If you enable this, you probably want
# to compile PostgreSQL with "-DLINUX_OOM_ADJ=0", so that individual backends
# can still be killed by the OOM killer.
#OOM_ADJ=-17

## 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.  (If you want the script to wait
# until the server has started, you could use "pg_ctl start -w" here.
# But without -w, pg_ctl adds no value.)
DAEMON="$prefix/bin/postmaster"

# What to use to shut down the postmaster
PGCTL="$prefix/bin/pg_ctl"

# What to use to init the data directory
PGINITDB="$prefix/bin/initdb"

set -e

# Only start if we can find the postmaster.
test -x $DAEMON ||
{
	echo "$DAEMON not found"
	if [ "$1" = "stop" ]
	then exit 0
	else exit 5
	fi
}

pg_setup_system()
{
  if [ -z "$(grep ^postgres /etc/passwd 2>/dev/null)" ]; then
    echo "$0: Creating system user 'postgres' with generic settings.  Review and modify as required."
    yes '' | adduser postgres >/dev/null 2>&1 || yes '' | useradd postgres >/dev/null 2>&1
  fi

  if [ ! -d $PGDATA ]; then
    echo "Setting up $PGDATA"
    mkdir -p $PGDATA
    chown postgres $PGDATA
    su - $PGUSER -c "$prefix/bin/initdb -D $PGDATA"
  fi
}


# Parse command line parameters.
case $1 in
  start)

  pg_setup_system

	echo -n "Starting PostgreSQL: "
	test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj
	su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
	echo "ok"
	;;
  stop)
	echo -n "Stopping PostgreSQL: "
	su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"
	echo "ok"
	;;
  restart)
	echo -n "Restarting PostgreSQL: "
	su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"
	test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj
	su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
	echo "ok"
	;;
  reload)
        echo -n "Reload PostgreSQL: "
        su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"
        echo "ok"
        ;;
  status)
	su - $PGUSER -c "$PGCTL status -D '$PGDATA'"
	;;
  init)
  pg_setup_system
	su - $PGUSER -c "$PGINITDB -D '$PGDATA'"
  ;;
  *)
	# Print help
	echo "Usage: $0 {start|stop|restart|reload|status|init}" 1>&2
	exit 1
	;;
esac

exit 0
