밑 pgaccess로 postgresql에 접속하는 거에 대해서 여러번
질문했었습니다.
그리고 수동으로 postgresql을 시작할 때 -i 옵션을 주니까
pgaccess로 postgresql에 접속을 할 수 있었습니다.
그런데 문제는 리눅스 부팅할 때마다 수동으로 할 수는 없고
원래 있던 postgresql 시작 스크립트를 수정할려고 하니
잘 안됩니다.
/etc/rc.d/init.d 디렉토리에 있는 postgresql이라는 스크립트를
열어서 start() 를 보니 다음과 같았습니다.
start(){
PSQL_START=$"Starting postgresql service: "
# Check for older PGDATA location.
if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ]
then
export PGDATA=/var/lib/pgsql
else
export PGDATA=/var/lib/pgsql/data
fi
# Check for the PGDATA structure
if [ -f $PGDATA/PG_VERSION ] && [ -d $PGDATA/base ]
then
# Check version of existing PGDATA
if [ `cat $PGDATA/PG_VERSION` != '7.2' ]
then
SYSDOCDIR="(Your System's documentation directory)"
if [ -d /usr/doc/postgresql-$PGVERSION ]
then
SYSDOCDIR=/usr/doc
fi
if [ -d /usr/share/doc/postgresql-$PGVERSION ]
then
SYSDOCDIR=/usr/share/doc
fi
if [ -d /usr/doc/packages/postgresql-$PGVERSION ]
then
SYSDOCDIR=/usr/doc/packages
fi
if [ -d /usr/share/doc/packages/postgresql-$PGVERSION ]
then
SYSDOCDIR=/usr/share/doc/packages
fi
echo
echo -e $"An old version of the database format was found.\nYou need to upgrade the data format before using PostgreSQL.\nSee $SYSDOCDIR/postgresql-$PGVERSION/README.rpm-dist for more information."
exit 1
# This doesn't seem to do anything useful...
# else
# if echo "$TYPESET"|grep "declare -f success ()" >/dev/null
# then
# success "$PSQL_CHECK"
# else
# echo " [ OK ]"
# fi
# echo
fi
# No existing PGDATA! Initdb it.
else
echo -n $"Initializing database: "
if [ ! -d $PGDATA ]
then
mkdir -p $PGDATA
chown postgres.postgres $PGDATA
fi
# Make sure the locale from the initdb is preserved for later startups...
[ -f /etc/sysconfig/i18n ] && cp /etc/sysconfig/i18n $PGDATA/../initdb.i18n
# Just in case no locale was set, use en_US
[ ! -f /etc/sysconfig/i18n ] && echo "LANG=en_US" > $PGDATA/../initdb.i18n
# Is expanded this early to be used in the command su runs
echo "export LANG LC_ALL LC_CTYPE LC_COLLATE LC_NUMERIC LC_CTYPE LC_TIME" >> $PGDATA/../initdb.i18n
# Initialize the database
su -l postgres -s /bin/sh -c "/usr/bin/initdb --pgdata=/var/lib/pgsql/data > /dev/null 2>&1" < /dev/null
[ -f $PGDATA/PG_VERSION ] && echo_success
[ ! -f $PGDATA/PG_VERSION ] && echo_failure
echo
fi
# Check for postmaster already running...
pid=`pidof -s postmaster`
if [ $pid ]
then
echo $"Postmaster already running."
else
#all systems go -- remove any stale lock files
rm -f /tmp/.s.PGSQL.* > /dev/null
echo -n "$PSQL_START"
=========================
su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p /usr/bin/postmaster start > /dev/null 2>&1" < /dev/null
==========================
sleep 1
pid=`pidof -s postmaster`
if [ $pid ]
then
success "$PSQL_START"
touch /var/lock/subsys/postgresql
echo $pid > /var/run/postmaster.pid
echo
else
failure "$PSQL_START"
fi
fi
}
스크립트는 잘 모르지만 뚫어지게 보면 ==== 표시 가운데가 결정적으로
postgresql을 시작하는 부분이고 요기에 -i 옵션을 주어야 할 것 같은데
적당한데 -i 옵션을 넣으면 시작을 하지 않습니다.
wrox 에서 나오는 beginning database with postgresql 을 보면
su -l postgres -c "nohup /usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data 줄줄줄
이라고 나옵니다.
차이는 위에 pg_ctl을 사용했고 아래는 postmaster를 사용했는데
이건 어떤 차이가 있는 건지 또 궁금하구요?
암튼 -i 옵션을 어떻게 넣으면 좋을까요?
|