27.5. Configure the /etc/rc.d/init.d/postgresql script file

To start and stop PostgreSQL Server, create the postgresql script file, touch /etc/rc.d/init.d/postgresql and add:


               #! /bin/sh
               # postgresql    This is the init script for starting up the PostgreSQL
               #               server

               # chkconfig: 345 85 15
               # description: Starts and stops the PostgreSQL backend daemon that handles \
               #              all database requests.
               # processname: postmaster
               # pidfile: /var/run/postmaster.pid
               #

               # Source function library.
               . /etc/rc.d/init.d/functions

               # Get config.
               . /etc/sysconfig/network

               # Check that networking is up.
               # Pretty much need it for postmaster.
               [ ${NETWORKING} = "no" ] && exit 0

               [ -f /usr/bin/postmaster ] || exit 0

               # This script is slightly unusual in that the name of the daemon (postmaster)
               # is not the same as the name of the subsystem (postgresql)

               # See how we were called.
               case "$1" in
               start)
               echo -n "Checking postgresql installation: "
               # Check for the PGDATA structure
               if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ]
               then
               # Check version of existing PGDATA

               if [ `cat /var/lib/pgsql/PG_VERSION` != '6.5' ]
               then
               echo "old version. Need to Upgrade."
               echo "See /usr/doc/postgresql-6.5.2/README.rpm for more information."
               exit 1
               else
               echo "looks good!"
               fi

               # No existing PGDATA! Initdb it.

               else
               echo "no database files found."
               if [ ! -d /var/lib/pgsql ]
               then
               mkdir -p /var/lib/pgsql
               chown postgres.postgres /var/lib/pgsql
               fi
               su -l postgres -c '/usr/bin/initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql'
               fi

               # Check for postmaster already running...
               pid=`pidof postmaster`
               if [ $pid ]
               then
               echo "Postmaster already running."
               else
               #all systems go -- remove any stale lock files
               rm -f /tmp/.s.PGSQL.* > /dev/null
               echo -n "Starting postgresql service: "
               su -l postgres -c '/usr/bin/postmaster -i -S -D/var/lib/pgsql'
               sleep 1
               pid=`pidof postmaster`
               if [ $pid ]
               then
               echo -n "postmaster [$pid]"
               touch /var/lock/subsys/postgresql
               echo $pid > /var/run/postmaster.pid
               echo
               else
               echo "failed."
               fi
               fi
               ;;
               stop)
               echo -n "Stopping postgresql service: "
               killproc postmaster
               sleep 2
               rm -f /var/run/postmaster.pid
               rm -f /var/lock/subsys/postgresql
               echo
               ;;
               status)
               status postmaster
               ;;
               restart)
               $0 stop
               $0 start
               ;;
               *)
               echo "Usage: postgresql {start|stop|status|restart}"
               exit 1
               esac

               exit 0
             

Now, make this script executable and change its default permissions:

                 [root@deep] /# chmod 700  /etc/rc.d/init.d/postgresql
               
Create the symbolic rc.d links for PostgreSQL with the command:

                 [root@deep] /# chkconfig --add postgresql
               

Start your new PostgreSQL server manually with the following command:

                     [root@deep] /# /etc/rc.d/init.d/postgresql start
                   

                     Checking postgresql installation: looks good!
                     Starting postgresql service: postmaster [22401]