Частта, която очевидно е грешна във вашия скрипт, е, че той очаква редовете след su - postgres
да се изпълнява като потребител на postgres. Това няма да се случи.
В пакетен режим, su - postgres
стартира и веднага излиза, защото към него не е подадена команда. След това следващите команди на скриптовете се изпълняват като потребителят стартира скрипта (вероятно root) и се провалят.
Вместо това трябва да напишете нещо подобно:
su - postgres <<-'EOF'
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
/usr/local/pgsql/bin/createdb test
EOF
# the lines after the EOF will be executed again as the initial user
Предложенията в коментарите предполагат, че сте инсталирали postgresql чрез пакет, но това не е контекстът на въпроса. Когато инсталирате от източник с ./configure
без аргументи и make install
, никога няма да инсталира нищо извън /usr/local/pgsql
. Напълно нормално е да нямате стартиращ скрипт под /etc
в този контекст.