La parte che è chiaramente sbagliata nel tuo script è che si aspetta le righe che seguono su - postgres
da eseguire come utente postgres. Questo non accadrà.
In modalità batch, su - postgres
si avvia ed esce immediatamente perché non gli viene inviato alcun comando. Quindi i comandi successivi degli script vengono eseguiti mentre l'utente avvia lo script (presumibilmente root) e falliscono.
Invece, dovresti scrivere qualcosa del genere:
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
I suggerimenti nei commenti presuppongono che tu abbia installato postgresql tramite un pacchetto, ma non è questo il contesto della domanda. Quando installi dal sorgente con ./configure
senza argomenti e make install
, non installerà mai nulla al di fuori di /usr/local/pgsql
. È perfettamente normale non avere uno script di avvio in /etc
in questo contesto.