Postgres: скрипт для копирования схемы с внутреннего сервера на сервер развертывания; без ввода паролей на каждом шагу
Я хочу скопировать схему базы данных (только схему; не данные) с внутреннего сервера на внешний сервер. Проблема, с которой я сталкиваюсь, заключается в вводе паролей на каждом этапе. Хотя шаги для копирования довольно просты, я не могу сгенерировать сценарий для автоматизации всего процесса.
Что имею до сих пор:
на внутреннем сервере:
pg_dump -C -s --file=schema.txt {name}
scp schema.txt prakhar@{external server}:/home/prakhar
на внешнем сервере:
dropdb {name}
createdb {name}
psql --file=schema.txt {name}
На каждом этапе мне предлагается пароль. Я хочу сделать две вещи: 1: запустить скрипт с внешнего сервера, чтобы получить схему из внутреннего; или наоборот 2. Включите пароль для внутренних и внешних серверов таким образом, чтобы скрипт позаботился об этом для меня.
1 ответ
Я бы порекомендовал обернуть эти команды в скрипты bash, и в каждую из них, перед запуском команд, добавьте следующую строку:
export PGPASSWORD=<password>
Где пароль, который вы хотите использовать. Это экспортирует его как переменную среды, которая доступна командам Postgres.
Вот другие методы, включая PGPASSWORD, для указания пароля Postgres.
Для команд *nix, таких как scp, есть и другие варианты. Одним из них является sshpass. Это будет хорошо работать, если вы захотите сохранить все это в виде сценария оболочки.
Другой вариант, который я, вероятно, использовал бы для такого рода вещей, заключался бы в удалении оболочки сценариев оболочки и вместо этого использования чего-то вроде Python's Fabric.
Вы можете запускать команды, используя sudo, а также команды на удаленных машинах, а также команды оболочки, такие как служебные программы Postgres (для этого вы должны установить PGPASSWORD в хэш среды в Fabric).