Назад | Перейти на главную страницу

создание базы данных на удаленном сервере

Я хочу установить базу данных 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.

Другие ответы очень хорошо справляются с решением проблемы, с которой вы столкнулись с этой конкретной командной строкой, но если вы работаете на удаленных хостах из Python, возможно, вам следует взглянуть на Парамико. Вот как.

Другой альтернативой было бы Ткань.