La parte que claramente está mal en su secuencia de comandos es que espera las líneas que siguen a su - postgres
para ser ejecutado como el usuario de postgres. Esto no sucederá.
En modo por lotes, su - postgres
se inicia e inmediatamente sale porque no se le envía ningún comando. Luego, los siguientes comandos de los scripts se ejecutan cuando el usuario inicia el script (presumiblemente root) y fallan.
En su lugar, deberías escribir algo como esto:
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
Las sugerencias en los comentarios asumen que ha instalado postgresql a través de un paquete, pero ese no es el contexto de la pregunta. Cuando instala desde la fuente con ./configure
sin argumentos y make install
, nunca instalará nada fuera de /usr/local/pgsql
. Es perfectamente normal no tener un script de inicio en /etc
en este contexto.