Bagian yang jelas salah dalam skrip Anda adalah skrip mengharapkan baris mengikuti su - postgres untuk dijalankan sebagai pengguna postgres. Ini tidak akan terjadi.
Dalam mode batch, su - postgres dimulai dan segera keluar karena tidak ada perintah yang dimasukkan ke dalamnya. Kemudian perintah skrip berikutnya dijalankan saat pengguna meluncurkan skrip (mungkin root) dan gagal.
Sebaliknya, Anda harus menulis sesuatu seperti ini:
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
Saran di komentar mengasumsikan bahwa Anda telah menginstal postgresql melalui sebuah paket, tetapi itu bukan konteks pertanyaannya. Saat Anda menginstal dari sumber dengan ./configure tanpa argumen dan make install , itu tidak akan pernah menginstal apa pun di luar /usr/local/pgsql . Sangat normal untuk tidak memiliki skrip startup di bawah /etc dalam konteks ini.