2015-03-27 2 views
0

Я пытаюсь установить PostgreSQL из исходного кода и выполнить его сценарий для автоматической установки.PostgreSQL - установка сценариев из исходного кода

Установка зависимостей, загрузка и компиляция PostgreSQL работает хорошо. Но есть 3 команды, которые мне нужно работать как Postgres пользователя

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/ 
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data 
/usr/local/pgsql/bin/createdb test 

Я видел this ссылку, но она не работает в моем сценарии здесь является выход:

Success. You can now start the database server using: 

    /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data/ 
or 
    /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ -l logfile start 

server starting 
createdb: could not connect to database template1: could not connect to server: No such file or directory 
     Is the server running locally and accepting 
     connections on Unix domain socket "/tmp/.s.PGSQL.5432"? 
[email protected]:~$ LOG: database system was shut down at 2015-03-27 10:09:54 UTC 
LOG: database system is ready to accept connections 
LOG: autovacuum launcher started 

И сценарий:

sudo su postgres <<-'EOF' 
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/ 
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ start 
/usr/local/pgsql/bin/createdb pumgrana 
EOF 

После этого мне нужно нажать enter и сервер работает. Моя база данных не создана. Похоже, скрипт пытается создать базу данных, а затем запустить сервер, но я не уверен. Кто-нибудь может мне помочь?

ответ

1

Есть несколько вещей неправильно с этим сценарием:

  • pg_ctl должен получить -w аргумент, убедившись, что он ждет, пока PostgreSQL не начал перед выходом.

  • У вас нет ошибок при проверке ошибок, поэтому он будет продолжать идти, если что-то не работает. Как минимум, вы должны использовать set -e в начале.

Я также предлагаю использовать sudo вместо su, которая является своеобразной устаревшими в эти дни. Вам никогда не нужно sudo su, вот что такое sudo -u. Использование sudo также облегчает передавать переменные окружения в Так что я бы написать что-то вроде (непроверенный).

sudo -u postgres PATH="/usr/local/pgsql/bin:$PATH" <<-'EOF' 
set -e 
initdb -D /usr/local/pgsql/data/ 
pg_ctl -D /usr/local/pgsql/data/ -w start 
createdb pumgrana 
EOF 

Вы можете передать PGPORT или какой-либо другой соответствующий окр варов в сценарий тоже.

Полностью отдельно к этому ... почему? Зачем это делать? Если вы автоматизируете установку из источника, почему бы просто не создать вместо нее .deb или .rpm, а затем установить это?

+0

Я не эксперт в бинарных файлах Linux и подобных материалах. Я не думал об этом создании файла .deb. Я попробую. Кроме того, я пытаюсь решить, что вы дали мне, я скажу вам, если это сработает. И спасибо за ваш ответ –

+0

Вопрос Антохе о создании пакета .deb. Вы имеете в виду установить postgreSQL с пакетом .deb, сделать мой суф на моем db, а затем сделать его .deb? –

+0

Я понятия не имею, что вы пытаетесь сделать, поэтому я не могу сказать. –

Смежные вопросы