Все зависит от того, как вы настроили доступ к базе данных в pg_hba.conf
. Существует отдельный файл конфигурации для каждого кластера базы данных (фактически для порта), и настройки могут отличаться от базы данных к базе данных.
Так что, да, если вы настроили его таким образом, то системный пользователь postgres
будет иметь доступ без пароля к некоторым базам данных, но будет предложено ввести пароль для других. по умолчанию означает, что системный пользователь postgres
имеет доступ без пароля к каждой базе данных как пользователь базы данных с тем же именем (postgres
).
Если в команде указан пароль с переменной среды PGPASSWORD
, но пароль не требуется, он будет автоматически игнорироваться.
Однако я цитирую руководство здесь :
PGPASSWORD (...) Использование этой переменной среды не рекомендуется из соображений безопасности.
Вы можете использовать файл паролей для автоматического предоставления паролей (.pgpass
в системах Unix). pg_dump
будет использовать его.
Наконец, рассмотрим параметры командной строки :
--no-password
--password
, чтобы заставить pg_dump запрашивать или не запрашивать пароль. Если пароль требуется, но отключен --no-password
, pg_dump завершится ошибкой.
Я бы включил доступ без пароля для системного пользователя postgres
к каждой базе данных в файле конфигурации pg_hba.conf
. Используйте peer
или ident
методы аутентификации . Тогда вам не нужно вводить пароль, и скрипт всегда будет работать:
local all postgres ident
Ваш сценарий будет упрощен до (не проверено):
sudo("su postgres -c \"pg_dump %s > /tmp/telemedia_newdb\"" % (HOST_SOURCE_DB))