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).

Другие вопросы по тегам