postgresql/src/bin/initdb/initdb.sh

223 lines
4.9 KiB
Bash

#!/bin/sh
#-------------------------------------------------------------------------
#
# initdb.sh--
# create a postgres template database
#
# this program feeds the proper input to the ``postgres'' program
# to create a postgres database and register it in the
# shared ``pg_database'' database.
#
# Copyright (c) 1994, Regents of the University of California
#
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.4 1996/07/23 03:03:19 scrappy Exp $
#
#-------------------------------------------------------------------------
# ----------------
# Set paths from environment or default values.
# The _fUnKy_..._sTuFf_ gets set when the script is installed
# from the default value for this build.
# Currently the only thing wee look for from the environment is
# PGDATA, PGHOST, and PGPORT
#
# ----------------
[ -z "$PGDATA" ] && { PGDATA=_fUnKy_DATADIR_sTuFf_; export PGDATA; }
[ -z "$PGPORT" ] && { PGPORT=5432; export PGPORT; }
[ -z "$PGHOST" ] && { PGHOST=localhost; export PGHOST; }
POSTGRESDIR=_fUnKy_POSTGRESDIR_sTuFf_
BINDIR=_fUnKy_BINDIR_sTuFf_
FILESDIR=$PGDATA/files
PATH=$BINDIR:$PATH
export PATH
CMDNAME=`basename $0`
# ----------------
# check arguments:
# -d indicates debug mode.
# -n means don't clean up on error (so your cores don't go away)
# ----------------
debug=0
noclean=0
verbose=0
for ARG
do
case "$ARG" in
-d) debug=1; echo "$CMDNAME: debug mode on";;
-n) noclean=1; echo "$CMDNAME: noclean mode on";;
-v) verbose=1; echo "$CMDNAME: verbose mode on";;
*) echo "initdb [-d][-n][-v]\n -d : debug mode\n -n : noclean mode, leaves temp files around \n -v : verbose mode"; exit 0;
esac
done
# ----------------
# if the debug flag is set, then
# ----------------
if test "$debug" -eq 1
then
BACKENDARGS="-boot -C -F -d"
else
BACKENDARGS="-boot -C -F -Q"
fi
TEMPLATE=$FILESDIR/local1_template1.bki
GLOBAL=$FILESDIR/global1.bki
if [ ! -f $TEMPLATE -o ! -f $GLOBAL ]
then
echo "$CMDNAME: error: database initialization files not found."
echo "$CMDNAME: either gmake install has not been run or you're trying to"
echo "$CMDNAME: run this program on a machine that does not store the"
echo "$CMDNAME: database (PGHOST doesn't work for this)."
exit 1
fi
if test "$verbose" -eq 1
then
echo "$CMDNAME: using $TEMPLATE"
echo "$CMDNAME: using $GLOBAL"
fi
#
# Figure out who I am...
#
PG_UID=`pg_id`
if test $PG_UID -eq 0
then
echo "$CMDNAME: do not install POSTGRES as root"
exit 1
fi
# ----------------
# create the template database if necessary
# the first we do is create data/base, so we'll check for that.
# ----------------
if test -d "$PGDATA/base"
then
echo "$CMDNAME: error: it looks like initdb has already been run. You must"
echo "clean out the database directory first with the cleardbdir program"
exit 1
fi
# umask must disallow access to group, other for files and dirs
umask 077
mkdir $PGDATA/base $PGDATA/base/template1
if test "$verbose" -eq 1
then
echo "$CMDNAME: creating SHARED relations in $PGDATA"
echo "$CMDNAME: creating template database in $PGDATA/base/template1"
echo "postgres $BACKENDARGS template1 < $TEMPLATE "
fi
postgres $BACKENDARGS template1 < $TEMPLATE
if test $? -ne 0
then
echo "$CMDNAME: could not create template database"
if test $noclean -eq 0
then
echo "$CMDNAME: cleaning up."
cd $PGDATA
for i in *
do
if [ $i != "files" -a $i != "pg_hba" ]
then
/bin/rm -rf $i
fi
done
else
echo "$CMDNAME: cleanup not done (noclean mode set)."
fi
exit 1;
fi
pg_version $PGDATA/base/template1
#
# Add the template database to pg_database
#
echo "open pg_database" > /tmp/create.$$
echo "insert (template1 $PG_UID template1)" >> /tmp/create.$$
#echo "show" >> /tmp/create.$$
echo "close pg_database" >> /tmp/create.$$
if test "$verbose" -eq 1
then
echo "postgres $BACKENDARGS template1 < $GLOBAL"
fi
postgres $BACKENDARGS template1 < $GLOBAL
if (test $? -ne 0)
then
echo "$CMDNAME: could create shared relations"
if (test $noclean -eq 0)
then
echo "$CMDNAME: cleaning up."
cd $PGDATA
for i in *
do
if [ $i != "files" ]
then
/bin/rm -rf $i
fi
done
else
echo "$CMDNAME: cleanup not done (noclean mode set)."
fi
exit 1;
fi
pg_version $PGDATA
if test "$verbose" -eq 1
then
echo "postgres $BACKENDARGS template1 < /tmp/create.$$"
fi
postgres $BACKENDARGS template1 < /tmp/create.$$
if test $? -ne 0
then
echo "$CMDNAME: could not log template database"
if (test $noclean -eq 0)
then
echo "$CMDNAME: cleaning up."
cd $PGDATA
for i in *
do
if [ $i != "files" ]
then
/bin/rm -rf $i
fi
done
else
echo "$CMDNAME: cleanup not done (noclean mode set)."
fi
exit 1;
fi
if test $debug -eq 0
then
if test "$verbose" -eq 1
then
echo "vacuuming template1"
fi
echo "vacuum" | postgres -F -Q template1 > /dev/null
fi
rm -f /tmp/create.$$