La partie qui est clairement fausse dans votre script est qu'il attend les lignes suivant le su - postgres
à exécuter en tant qu'utilisateur postgres. Cela n'arrivera pas.
En mode batch, su - postgres
démarre et se termine immédiatement car aucune commande ne lui est transmise. Ensuite, les commandes suivantes des scripts sont exécutées en tant qu'utilisateur lançant le script (vraisemblablement root) et elles échouent.
Au lieu de cela, vous devriez écrire quelque chose comme ceci :
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
Les suggestions dans les commentaires supposent que vous avez installé postgresql via un package, mais ce n'est pas le contexte de la question. Lorsque vous installez depuis la source avec ./configure
sans arguments et make install
, il n'installera jamais rien en dehors de /usr/local/pgsql
. Il est parfaitement normal de ne pas avoir de script de démarrage sous /etc
dans ce contexte.