Я хочу установить базу данных postgresql на удаленном сервере Linux. Чтобы создать базу данных на удаленном сервере, я написал сценарий на питоне, который выполняет команды на сервере. Я запускаю команды в следующем порядке:
cmd = "wget http://yum.pgrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm"
execute cmd
cmd = "rpm -Uvh http://yum.pgrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm"
execute cmd
cmd = "yum install postgresql postgresql-server"
execute cmd
...и так далее.
Все работает нормально до установки postgres и запуска базы данных. Проблема возникает, когда я хочу создать базу данных в postgreql. Я обнаружил, что мне нужно переключиться на пользователя postgres и запустить psql
для выполнения любых команд, связанных с базой данных. Например:
# su postgres
# psql
# create database test;
... но поскольку я передаю все команды последовательно через удаленный код Python (как показано в первом примере), кажется совершенно невозможным запустить эти три команды вместе (su postgres
, и psql
и create
) от клиента. Есть ли способ запустить все три команды вместе?
Я запускаю следующую команду:
# su postgres && psql && create database test;
... но только первая команда (su postgres
) выполняется.
попробуйте это, я не тестировал
su - postgres -c 'psql -c "create database test"'
Итак, вы подаете в суд как пользователь postgres и запускаете команду psql с командой create database.
Попробуйте использовать psql в неинтерактивном режиме. Например:
psql -c "create database test"
Другой способ - использовать оболочку createdb. Проверьте http://www.postgresql.org/docs/8.4/static/app-createdb.html
Как писал Майк, чтобы запустить команду от имени другого пользователя (в данном случае postgres), используйте su с параметром -c.