Запустить командный файл с командой psql без пароля

Я пытаюсь выполнить эту команду psql используя пакетный скрипт:

 psql --host=localhost --dbname= --port= --username= --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt 

Проблема в том, что он запрашивает пароль каждый раз, когда я исполняю пакетный скрипт. Как я могу аргументировать пароль через пакетный файл?

2 Solutions collect form web for “Запустить командный файл с командой psql без пароля”

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

Только отключить запрос пароля

Если ваша проблема – это только пароль, вы можете ее отключить. Я цитирую здесь инструкцию :

-w
--no-password

Никогда не выдавайте запрос пароля. Если серверу требуется аутентификация по паролю, а пароль недоступен другими средствами, такими как файл .pgpass , попытка подключения завершится с ошибкой. Эта опция может быть полезна в пакетных заданиях и сценариях, где пользователь не вводит пароль. (…)

Вам, вероятно, не нужен пароль

Обычно это не нужно. По умолчанию postgres суперпользователя базы данных по умолчанию соответствует системному пользователю с тем же именем. Запуск psql из этой учетной записи не требует пароля, если в вашем pg_hba.conf установлен peer или ident метод проверки подлинности . У вас, вероятно, есть такая строка:

 local all postgres peer 

И обычно также:

 local all all peer 

Это означает, что каждый локальный пользователь может войти во всю базу данных как пользователь базы данных с тем же именем без пароля.
Однако здесь есть общее заблуждение. Цитирование снова :

Этот метод поддерживается только локальными подключениями .

Смелый акцент мой.
Вы подключаетесь к localhost , который не является «локальной связью» , хотя в нем есть слово «local». Это TCP / IP-соединение с 127.0.0.1. Википедия на localhost :

В современных компьютерных системах localhost как имя хоста преобразуется в IPv4-адрес в блочном блоке 127.0.0.0/8 (loopback), обычно 127.0.0.1 или ::1 в IPv6.

Простое решение для локальных соединений

Опустите параметр -h из вызова psql . Повторное цитирование руководства по psql :

Если вы опустите имя хоста, psql будет подключаться через сокет Unix-домена к серверу на локальном хосте или через TCP / IP в localhost на компьютерах, у которых нет сокетов Unix-домена.

Windows

… не имеет сокетов Unix-домена, строки pg_hba.conf начинающиеся с local , не применимы к Windows. В Windows вы подключаетесь через localhost по умолчанию, что возвращает нас к началу.

Если ваши требования безопасности слабы, вы можете просто доверять всем соединениям через localhost :

 host all all 127.0.0.1/32 trust 

Я бы сделал это только для отладки с удаленными подключениями. Для получения дополнительной безопасности вы можете использовать аутентификацию SSPI в Windows. Добавьте эту строку в pg_hba.conf для «локальных» соединений:

 host all all 127.0.0.1/32 sspi 

Если вам действительно нужен пароль

Вы можете установить переменную среды , но это обескураживает , особенно для Windows. Руководство:

PGPASSWORD ведет себя так же, как параметр соединения с паролем . Использование этой переменной среды не рекомендуется по соображениям безопасности, так как некоторые операционные системы позволяют пользователям без полномочий root видеть переменные среды процесса через ps; вместо этого рассмотрим использование файла ~/.pgpass (см. раздел 32.15 ).

Руководство по psql :

Строка conninfo – это альтернатива для указания параметров подключения:

  $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require" 

Или URI , который используется вместо имени базы данных:

  $ psql postgresql://myuser:secret_pw@localhost:5432/mydb?sslmode=require 

Файл паролей

Но обычно предпочтительнее настраивать файл .pgpass а не .pgpass пароли в файлы сценариев.
Внимательно прочитайте краткую главу в руководстве . В частности, обратите внимание, что здесь …

Имя хоста localhost соответствует как TCP (имя хоста localhost ), так и сокету Unix домена ( pghost empty или каталог сокета по умолчанию), исходящие от локальной машины.

Точный путь зависит от системы. Этот файл может содержать пароли для нескольких комбинаций роли и порта (кластер БД):

 localhost:5432:*:myadmin:myadminPasswd localhost:5434:*:myadmin:myadminPasswd localhost:5437:*:myadmin:myadminPasswd ... 

На компьютерах Windows найдите файл в:

 C:\Documents and Settings\My_Windows_User_Name\Application Data\postgresql 

У меня была одна и та же проблема:

 psql -hlocalhost -d -U 

всегда запрашивал у меня пароль. Это объясняется тем, как @Erwin объясняется из-за того, что -hlocalhost подключается через TCP, а не через сокет Unix-домена (для ОС на базе Unix). Поэтому даже если вы настроили свой local как надежный:

 local all all trust 

он все равно запросит пароль. Поэтому, чтобы настроить -hlocalhost на работу через TCP, мне пришлось настроить host для адресов localhost, например:

 host all all 127.0.0.1/32 trust host all all ::1/128 trust 

Но это не сработало для меня. Я должен был объединить оба эти:

 host all all localhost trust 

Некоторые дополнительные показания:

  • Настройка файла pg_hba.conf
  • Методы аутентификации: доверие, сверстники, идентификаторы и т. Д.
  • Как управлять соединениями MongoDB в веб-приложении Node.js?
  • mySQL - создание новой таблицы с использованием данных и столбцов из трех таблиц
  • Как немедленно закрыть сервер HTTP (Node.js)?
  • HttpClient 4.0.1 - как освободить соединение?
  • «Основное соединение было закрыто: при отправке произошла непредвиденная ошибка». С SSL-сертификатом
  • Java обнаруживает потерянное соединение
  • Почему при запуске URL-адреса возникает исключение «java.net.ConnectException: Connection timed out»?
  • Как несколько клиентов одновременно подключаются к одному порту, например 80, на сервере?
  • Interesting Posts

    ASP.NET MVC RequireHttps только в производстве

    Dropbox работает медленно и загружает только часть скорости загрузки

    Как десериализовать дату JS с помощью jacksonа?

    Должен ли я использовать отдельные экземпляры ScriptEngine и CompiledScript для каждого streamа?

    Получить имя хоста текущего запроса в node.js Express

    jQuery watch div

    Самый быстрый способ найти второе (третье …) наивысшее / наименьшее значение в векторе или столбце

    Создайте загрузочный компакт-диск Ghost с жесткого диска

    Глобальные события в угловых

    Является ли отказ от приложения недоверчивым?

    Maven не находит тесты JUnit для запуска

    Как включить динамический выход, когда наушники включены для программ SELECT?

    Почему @ font-face бросает ошибку 404 на файлы Woff?

    Есть ли способ закладки всех вкладок в Chrome?

    «Операция недействительна из-за ошибки текущего состояния объекта во время обратной передачи

    Давайте будем гением компьютера.