deux fichiers :
_pg_include
setdb.bash
à adapter selon l'installation du moteur postgres
cat _pg_include
#! /bin/bash
#
# Bash library for PostgreSQL.
#
#set -xv
# CONSTANTS
export PGDEFAULTPSQL="$(locate bin/psql | sort | tail -1)"
export PGTAB="/usr/localt/psql/pgtab"
export PGREF="--host=<hostname> --port=5432 --dbname=<dbname> --user=<usename> -v ON_ERROR_STOP=1"
export SILENT="--tuples-only"
# VARIABLES
export PGSID=""
export PGHOME=""
export PGVERSION=""
export CONFIG_VERSION=""
export PGDBBASE=""
export PGDATA=""
export PGHOST=""
export PGPORT=""
export PGSTART=""
export PGSTATUS=""
export PGPSQL="${PGDEFAULTPSQL}"
function __DBSet()
{
# Check parameters
if [ $# -ne 1 ]; then
PGSID=""
PGHOME=""
PGVERSION=""
CONFIG_VERSION=""
PGDBBASE=""
PGDATA=""
PGHOST=""
PGPORT=""
PGSTART=""
PGSTATUS=""
PGPSQL="${PGDEFAULTPSQL}"
else
pgline=$1
# Get instance environement
PGHOME=$(echo "${pgline}" | cut -d : -f 2)
PGVERSION=$(echo "${PGHOME}" | cut -d / -f 4)
cversion="$(${PGHOME}/bin/pg_config --version | cut --delimiter=' ' --fields=2)"
Mv="$(echo ${cversion} | cut --delimiter='.' --fields=1 | egrep --only-matching ^[0-9]+ )"
mv="$(echo ${cversion} | cut --delimiter='.' --fields=2 | egrep --only-matching ^[0-9]+ )"
lv="$(echo ${cversion} | cut --delimiter='.' --fields=3 | egrep --only-matching ^[0-9]+ )"
CONFIG_VERSION="$(printf "%02d%02d%02d" $Mv $mv $lv)"
PGDBBASE=$(echo "${pgline}" | cut -d : -f 3)
# To Manage new filesystem requirement
if [ -e ${PGDBBASE}/data ]; then
PGDATA=${PGDBBASE}/data;
else
PGDATA=${PGDBBASE}/main/data;
fi
PGHOST="${PGDATA}"
PGPORT="$(egrep -o "^[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9][0-9]*" ${PGDATA}/postgresql.conf | cut -d = -f 2 | sed 's/ //g')"
PGSTART=$(echo "${pgline}" | cut -d : -f 4 | cut -d ' ' -f 1)
PATH=${PGHOME}/bin:${PATH}
LD_LIBRARY_PATH=${PGHOME}/lib:${LD_LIBRARY_PATH}
MANPATH=${PGHOME}/share/man:${MANPATH}
INMEMORY=$(ps -fu postgres | grep -v grep | grep /bin/postgres | grep -wc ${PGSID})
if [ ${INMEMORY} -eq 1 ]; then
PGSTATUS="ON"
elif [ ${INMEMORY} -gt 1 ]; then
PGSTATUS="ERROR : MORE THAN ONE INSTANCE FOUND IN MEMORY !"
else
PGSTATUS="OFF"
fi
PGPSQL="${PGHOME}/bin/psql"
if [ ! -x "${PGSQL}" ]; then
PGPSQL="${PGDEFAULTPSQL}"
fi
fi
}
function printError()
{
printf "$*"
return 1
}
function exitError()
{
printf "$*"
exit 1
}
function pgExec()
{
if [ $# -gt 1 ]; then
PGDBNAME=$1
COMMAND=$2
else
COMMAND=$1
fi
if [ ! -x ${PGPSQL} ]; then
printError "Problem with '${PGPSQL}'"
fi
if [ $# -ge 1 ]; then
result=$(${PGPSQL} --host=${PGHOST} --port=${PGPORT} --tuples-only ${PGDBNAME} -v ON_ERROR_STOP=1 -c "${COMMAND}" 2>&1)
if [ $? -ne 0 ]; then
printError "$result"
fi
fi
echo "${result}"
}
function DBSet()
{
# Check environement
if [ ! -r ${PGTAB} ]; then
printError "${PGTAB} can't be read"
else
# Check parameters
if [ $# -eq 1 ]; then
export PGSID=$1
# Get instance environement
pglines=$(egrep "^${PGSID}:.+:.+:[yn]" ${PGTAB})
if [ $? -ne 0 ]; then
pglines=$(egrep "^[# ]*${PGSID}:.+:.+:[yn]" ${PGTAB})
if [ $? -eq 0 ]; then
printError "n${PGSID} found in ${PGTAB} but commented.nPlease correct ${PGTAB} (vim ${PGTAB})nn"
else
printError "n${PGSID} unknownnn"
fi
elif [ $(echo "${pglines}" | wc -l) -gt 1 ]; then
printError "nMore than one ${PGSID} found into ${PGTAB}.nPlease correct ${PGTAB} (vim ${PGTAB})nn"
else
pgline=${pglines}
__DBSet ${pgline}
fi
fi
fi
}
cat setdb.bash
#! /bin/bash
##################################################################
## Program : setdb.bash #
## Description : Set environement variables according to #
## database #
##################################################################
#
#
#set -xv
# CONSTANTS
PRGNAME=$(basename $0 2> /dev/null)
if [ $? -ne 0 ]; then
PRGNAME="Unknown"
fi
PRGPATH=$(dirname $0 2> /dev/null)
if [ "${PRGPATH}x" == "x" ] || [ ! -e "${PRGPATH}" ]; then
PRGPATH="/usr/local/pgsql/bin"
fi
# INCLUDE
if [ -e ${PRGPATH}/_pg_include ]; then
. ${PRGPATH}/_pg_include
elif [ -e /usr/local/pgsql/bin/_pg_include ]; then
. /usr/local/pgsql/bin/_pg_include
fi
# Check environement
if [ $# -ne 1 ]; then
SID=""
DBSet
printf "nUsage: dbset SIDnn"
else
SID=$1
DBSet ${SID}
echo "PGSID : "${PGSID}" (port ${PGPORT}) STATUS : "${PGSTATUS,,}
echo "PGVERSION : "${PGVERSION}
echo "PGHOME : "${PGHOME}
echo "PGDATA : "${PGDATA}
fi