summaryrefslogblamecommitdiffstats
path: root/system/postgresql/rc.postgresql.new
blob: 7e984c65820589adf91794468ddeb990ebba661c (plain) (tree)
1
2
3
4
5
6

           



                                                                  






                                                            
                                                                 

 






















                                                                            

                      







                                                              











                                           
                                         




















                                                                                                 
                                                  









                                                                                  

                                                                 
                                                                                                               















                                                                                     







                                                                    
                                                                  




                                                                 

                                               
                                                                                               


                                                               













                                                                    





                                                                
                                                  


















                                                                                  

                                                                                            


                      
#!/bin/bash

## PostgreSQL startup script for Slackware Linux
##
## Copyright (c) 2007-2013 Adis Nezirovic <adis _at_ linux.org.ba>
## Licensed under GNU GPL v2

# Do not source this script (since it contains exit() calls)

# Before you can run postgresql you'll need to create the
# database files in /var/lib/pgsql. The following should do
# the trick.
#
#   $ su postgres -c "initdb -D /var/lib/pgsql/@PG_VERSION@/data"
#

# Since PostgreSQL 9.3 this startup script can run multiple PostgreSQL
# versions on different ports and with different data dirs.
# 
# e.g. PG_VERSION=9.4 PG_PORT=6432 /etc/rc.d/rc.postgresql start
# 
# Older PostgreSQL 9.x versions are supported too, just use PG_VERSION=9.2

PG_VERSION=${PG_VERSION:-@PG_VERSION@}
PG_PORT=${PG_PORT:-@PG_PORT@}
LIBDIRSUFFIX="@LIBDIRSUFFIX@"

if [ "x$PG_VERSION" != "x9.2" ];then
	LOGFILE=/var/log/postgresql-$PG_VERSION
	DATADIR=/var/lib/pgsql/$PG_VERSION/data
	POSTGRES=/usr/lib${LIBDIRSUFFIX}/postgresql/$PG_VERSION/bin/postgres
	PG_CTL=/usr/lib${LIBDIRSUFFIX}/postgresql/$PG_VERSION/bin/pg_ctl
else
	LOGFILE=/var/log/postgresql
	DATADIR=/var/lib/pgsql/data
	POSTGRES=/usr/bin/postgres
	PG_CTL=/usr/bin/pg_ctl
fi

PIDFILE=postmaster.pid

# oom-killer score
# if defined and set to -1000, main postmaster wont be killed
# by Linux OOM killer, but individual backends still could be
# (since OOM_SCORE_ADJ in SlackBuild is set to 0)
#
# http://www.kernel.org/doc/Documentation/filesystems/proc.txt
OOM_SCORE_ADJ=-1000

# Return values (according to LSB):
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running

pg_ctl()
{
	CMD="$PG_CTL -o '-p $PG_PORT' $@"
	su - postgres -c "$CMD"
}

if [ ! -f $POSTGRES ]; then
	echo "Could not find 'postgres' binary. Maybe PostgreSQL is not installed properly?"
	exit 5
fi

case "$1" in

	"start")
		echo "Starting PostgreSQL"
		touch $LOGFILE
		chown postgres:wheel $LOGFILE
		chmod 0640 $LOGFILE
	
		if [ ! -e $DATADIR/PG_VERSION ]; then
			echo "You should initialize the PostgreSQL database at location $DATADIR"
			exit 6
		fi
	
		if [ $(pgrep -f $POSTGRES) ]; then

			echo "PostgreSQL daemon already running"
			if [ ! -f $DATADIR/$PIDFILE ]; then
				echo "Warning: Missing pid file $DATADIR/$PIDFILE"
			fi
			exit 1

		else # remove old socket, if it exists and no daemon is running.

			if [ ! -f $DATADIR/$PIDFILE ]; then
				rm -f /tmp/.s.PGSQL.$PG_PORT
				rm -f /tmp/.s.PGSQL.$PG_PORT.lock
				test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj
				pg_ctl start -w -l $LOGFILE -D $DATADIR
				exit 0
			else
				echo "PostgreSQL daemon was not properly shut down"
				echo "Please remove stale pid file $DATADIR/$PIDFILE"
				exit 7
			fi

		fi	
	;;

	"stop")
		echo "Shutting down PostgreSQL..."
		pg_ctl stop -l $LOGFILE -D $DATADIR -m smart
	;;

	"force-stop")
		# Take care! This will kill _all_ client connections
		# and rollback current transactions.
		echo "Shutting down PostgreSQL (fast)..."
		pg_ctl stop -l $LOGFILE -D $DATADIR -m fast
	;;
	
	"unclean-stop")
		# Take care! This will abort server process itself
		# resulting with database recovery on next start.
		echo "Shutting down PostgreSQL (immediate)..."
		pg_ctl stop -l $LOGFILE -D $DATADIR -m immediate
	;;

	"restart")
		echo "Restarting PostgreSQL..."
		test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj
		pg_ctl restart -l $LOGFILE -D $DATADIR -m smart
	;;

	"force-restart")
		# Take care! This will kill _all_ client connections
		# and rollback current transactions.
		echo "Restarting PostgreSQL (fast)..."
		pg_ctl restart -l $LOGFILE -D $DATADIR -m fast
	;;

	"unclean-restart")
		# Take care: This will abort server process itself
		# resulting with database recovery on start.
		echo "Restarting PostgreSQL (immediate)..."
		pg_ctl restart -l $LOGFILE -D $DATADIR -m immediate
	;;

	"reload")
		echo "Reloading configuration for PostgreSQL..."
		pg_ctl reload -l $LOGFILE -D $DATADIR -m smart
	;;

	"status")
		if [ $(pgrep -f $POSTGRES) ]; then
			echo "PostgreSQL is running"

			if [ ! -e $DATADIR/$PIDFILE ]; then
				echo "Warning: Missing pid file $DATADIR/$PIDFILE"
			fi

			exit 0
		else
			echo "PostgreSQL is stopped"

			if [ -e $DATADIR/$PIDFILE ]; then
				echo "Detected stale pid file $DATADIR/$PIDFILE"
			fi

			exit 0
		fi
	;;

	*)
		# unclean-stop and unclean-restart are not documented on purpose.
		echo "Usage: $0 {start|stop|force-stop|status|restart|force-restart|reload}"
		exit 1
	;;
esac