Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

[Postgres] set un environnement

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

Les commentaires sont fermés.