Den del som är uppenbart fel i ditt skript är att det förväntar sig raderna efter su - postgres
att köras som postgres-användare. Detta kommer inte att hända.
I batchläge, su - postgres
startar och avslutas omedelbart eftersom inget kommando matas till den. Sedan exekveras nästa kommandon för skripten när användaren startar skriptet (förmodligen root) och de misslyckas.
Istället bör du skriva något så här:
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
Förslagen i kommentarerna förutsätter att du har installerat postgresql via ett paket, men det är inte sammanhanget för frågan. När du installerar från källan med ./configure
utan argument och make install
, kommer den aldrig att installera något utanför /usr/local/pgsql
. Det är helt normalt att inte ha något startskript under /etc
i detta sammanhang.