Arrancar PostgreSql y dejarlo listo para utilizar (script)

Imagen de pepo

HOla...
Un amigo mio me pidio ayuda sobre como levantar PostgreSql creando el cluster de la base de datos y obviamente la base de datos... como han sido algunos, refiné un script de bash que tenía por allí y la he probado con PostgreSql 7.4.2 y funciona muy bien. El script aunque pequeñito puede ser usado para ver un poco los comandos; además lo publico bajo GPL


#!/bin/sh
clear
echo "Script para PostgreSql ... diseniado por {pepo}"
MODO=""
LOG=/tmp/pepoPostgreSql.log
TEMP=`getopt -o kdip:b:u: -- "$@"`
if [ $? != 0 ] ; then echo "Terminando..." >&2 ; exit 1 ; fi
eval set -- "$TEMP"

function uso() {
clear
echo "Gracias por usar el Script para PostgreSql de pepo:"
cat << EOF
Modo instalador:
$0 -i -p -b [-u ]
Modo demonio
$0 -d -p
Modo killer (parar demonio)
$0 -k

cluster_path : ruta para la Base de Datos
db_name : nombre de la Base de Datos
usuario : duenio de la Base de Datos

EOF
}

function terminado() {
echo "============================================="
echo "Terminado"
echo "============================================="
}

function crearCluster() {
if [ -d "$clusterDB" ] ; then
clear
cat << EOF

El cluster $clusterDB existe.

Si se trata de una base de datos creada anteriormente, entonces corra este programa en modo de demonio que para algo lo disenie.

EOF
read -p "¿Desea continuar y borrar los datos contenidos en $clusterDB? [s/n]: " continuar
case "$continuar" in
y*|Y*|s*|S*)
;;
*)
exit 1
;;
esac
fi
if [ ! -d "$clusterDB" ] ; then rm -f $clusterDB ; mkdir $clusterDB ; fi
if [ ! -w "$clusterDB" ] ; then echo "El Cluster $clusterDB no es escribible" ; exit 1 ; fi
rm -rf $clusterDB/*
echo "============================================="
echo "Listo para crear el cluster $clusterDB..."
echo "============================================="
initdb -D $clusterDB
terminado
}

function ponerDemonio() {
echo "Lanzando el demonio para la base de datos..."
postmaster -i -D $clusterDB > $LOG 2>&1 &
terminado
}

function pararDemonio() {
PID=`cat /tmp/.s.PGSQL.5432.lock | head -1`
kill -INT $PID
}

function crearBD() {
echo "============================================="
echo "Listo para crear la base de datos $baseDatos..."
echo "============================================="
createdb $baseDatos
if [ "$elUsuario" != "" ] ;
then
createuser -e -d -a $elUsuario
fi
terminado
}

while true ; do
case "$1" in
-i)
MODO="i"
shift
;;
-d)
MODO="d"
shift
;;
-k)
MODO="k"
shift
;;
-p)
clusterDB=$2
shift 2
;;
-b)
baseDatos=$2
shift 2
;;
-u)
elUsuario=$2
shift 2
;;
--)
shift
break
;;
*)
echo "Falla"
exit 1
;;
esac

done

if [ "$MODO" = "i" ] ;
then
if [ "$clusterDB" = "" ] ; then uso ; exit 1 ; fi
if [ "$baseDatos" = "" ] ; then uso ; exit 1 ; fi
echo "Modo instalador"
crearCluster
ponerDemonio
sleep 1
crearBD
elif [ "$MODO" = "d" ] ;
then
if [ "$clusterDB" = "" ] ; then uso ; exit 1 ; fi
echo "Modo demonio"
ponerDemonio
elif [ "$MODO" = "k" ] ;
then
pararDemonio
exit 0
else
uso
fi

cat << EOF

Si todo ha salido bien, seria suficiente ahora con:

psql

pero dependera mucho de la configuracion que hayas hecho sobre pg_hba.conf

Comentarios

Versiones actuales

Cuando instalas las versiones actuales de PostgreSQL se copia en el directorio /etc/rc.d/init.d un archivo con nombre postgresql-9.x el mismo que es un script que te indica los directorios donde se ha instalado y otras cosas más, si es CenOS puedes ejecutar el siguiente comando:
# chkconfig postgresql-9.x on
y verificarlo con
# chkconfig --list | grep postgrespql

Te aparecerá algo como esto:

postgresql 0:desactivado 1:desactivado 2:activo 3:activo 4:activo 5:activo 6:desactivado

Si el caso es instalación desde los fuentes es un poco más largo pero es posible configurarlo también .