Force rebuild databázového clusteru

Z PostgreSQL
Skočit na navigaci Skočit na vyhledávání

Rebuildne databázový cluster. POZOR - NEVRATNĚ!!!!

Pokud je zadán parametr, pak je vytvořen databázový účet s právy superusera

#!/bin/bash

# Installation prefix
prefix=/usr/local/pgsql

PGCTL="$prefix/bin/pg_ctl"
PGUSER=postgres

if [ ! -n "$PGDATA" ]; then
  PGDATA="$prefix/data"
fi

echo "shutdown server"
su - $PGUSER -c "$PGCTL status -D $PGDATA" &> finitdb_log
if [ $? != 1 ]; then
  su - $PGUSER -c "$PGCTL stop -D  $PGDATA -m fast" &>> finitdb_log
  if [ $? != 1 -a $? != 0 ]; then
    su - $PGUSER  -c "$PGCTL status -D  $PGDATA" &>> finitdb_log
    while [ $? != 1 -a $? != 3 ]; do
      echo "PostgreSQL still running.."
      sleep 1
      su - $PGUSER -c "$PGCTL status -D  $PGDATA" &>> finitdb_log
    done
  fi
fi

echo "reinit database cluster"
rm -R -f  $PGDATA/* &>> finitdb_log
su - $PGUSER -c "$prefix/bin/initdb -D $PGDATA" &>> finitdb_log

echo "start server"
/etc/init.d/pgsql start &>> finitdb_log
$prefix/bin/pg_isready &>> finitdb_log
while [ $? != 0 ]; do
  sleep 1;
  $prefix/bin/pg_isready &>> finitdb_log
done

if [ -n "$1" ]; then
  echo "create role $1"
  su - $PGUSER -c "$prefix/bin/createuser -s $1" &>> finitdb_log
fi

echo "done"

Např:

[root@localhost pavel]# finitdb pavel
shutdown server
reinit database cluster
start server
create role pavel
done