#windows #postgresql
#Windows #postgresql
Вопрос:
Моя цель — иметь возможность запускать команду без запроса моего пароля. Есть ли какой-либо способ добиться этого из командной строки Windows? В Linux я чувствую, что мог бы отправить пароль в standard in или что-то в этом роде, но я не уверен, смогу ли я сделать это для Windows.
Спасибо!
Ответ №1:
Есть два способа:
- Установите переменную среды PGPASSWORD, например
set PGPASSWORD=yoursecretpassword
- Используйте файл паролей,
%APPDATA%postgresqlpgpass.conf
как описано в документации
В файле паролей (мое местоположение C:UsersGrzesiekAppDataRoamingpostgresqlpgpass.conf ) используйте указанный в формате doc. Например, для подключения базы данных postgres в качестве роли postgres на локальном сервере 5432 добавьте:
localhost:5432:postgres:postgres:12345
Я проверил это, и это работает хорошо (для меня), но не используйте 127.0.0.1).
Комментарии:
1. @Задающий вопрос: обновил мой ответ, он должен работать и для file
Ответ №2:
Другой удобный вариант (особенно если ваш PG-сервер работает на вашем собственном клиентском компьютере, и если это не создает для вас никаких проблем с безопасностью) — разрешить вход без пароля на сервере (режим аутентификации «доверие»).
Например, эта строка в pg_hba.conf
(в вашем каталоге ДАННЫХ, типичное расположение: C:Program FilesPostgreSQL9.0data
) предоставляет доступ без пароля с вашего локального компьютера.
host all all 127.0.0.1/32 trust
Затем подключитесь с
psql.exe -h 127.0.0.1 -U postgres -w [YOUR_DB_NAME]
Ответ №3:
Я знаю, что это старый вопрос, но для тех, кто выглядит так, как я, трудно найти решение для Windows. поместите это в файл .bat, и это сработает (по крайней мере, для меня это сработало). измените director на каталог postres, задайте переменную среды PGPASSWORD
выполните команду копирования в файл csv, а затем очистите переменную среды, затем вернитесь в корневой каталог.
cd C:Program FilesPostgreSQL9.5bin
set PGPASSWORD=yourpassword
psql -d databasename -U yourusername -w -c "COPY (select * from yourtable) TO 'c:/Users/yourdirectory/yourcsvfilename.csv' DELIMITER '|' CSV HEADER;"
set PGPASSWORD=
cd c:
Ответ №4:
Я понимаю, что этот вопрос немного устарел, но я считаю, что есть лучшее средство для безопасного входа в PostgreSQL без пароля в Windows — SSPI.
-
Создайте локальную учетную запись пользователя или учетную запись домена и войдите в PostgreSQL с тем же именем.
-
В
pg_ident.conf
создайте сопоставление:# MAPNAME SYSTEM-USERNAME PG-USERNAME SSPI username@AUTHORITY loginname
Замените имя пользователя на имя пользователя Windows (это
sAMAccountName
атрибут для учетных записей домена) и замените ПОЛНОМОЧИЯ на имя компьютера или короткое доменное имя. Если вы не уверены, что использовать для АВТОРИЗАЦИИ, проверьте файл журнала PostgreSQL. Для локальной учетной записи это будет имя компьютера; для учетной записи домена это, вероятно, короткое доменное имя. Наконец, замените loginname именем входа в PostgreSQL (чтобы уменьшить путаницу, я бы рекомендовал использовать одно и то же имя как для имени пользователя, так и для имени входа). -
В
pg_hba.conf
разрешите вход в систему; например:# TYPE DATABASE USER ADDRESS METHOD host all loginname 127.0.0.1/32 sspi map=SSPI host all loginname ::1/128 sspi map=SSPI
-
Если учетная запись домена, установите для нее SPN; например:
setspn -S POSTGRES/serverfqdn username
Теперь вы можете войти в Windows, используя указанное имя пользователя, и выполнить psql.exe
и т.д. без необходимости ввода пароля.
Ответ №5:
Еще одна альтернатива для тех, кто не хочет использовать файл .pgpass и хочет выполнить в одном экземпляре командной строки.
set "PGPASSWORD=yourpass" amp;amp; createdb -h localhost -p 5432 -U postgres new_db_name
Я ссылался почти на каждое решение, связанное с командной строкой, и, наконец, закончил, обернув "
вокруг PGPASSWORD =yourpass при настройке в Windows 11.
Ответ №6:
Шаги:
Первая переменная среды PGPASSWORD
C:Windowssystem32 > установить PGPASSWORD=клавиша
перед
psql -d на основе dedatos -U usuario
Готово,
Ответ №7:
Я заставил это работать в Postgres 15 с:
psql -U postgres -h 127.0.0.1 -p 54322 -f some_file password=postgres
J
Ответ №8:
Если вы умеете использовать Powershell, вы можете установить переменные среды встроенными, аналогично bash.
Это должно сработать:
$Env:PGPASSWORD='your-pass'; psql -U postgres
Обратите внимание на точку с запятой между установкой переменной и фактической командой, это важно, поскольку это встроенные, но две отдельные команды.
Ответ №9:
Я нашел другое полезное решение, которое сработало для меня по этой ссылке. В основном он устанавливает PGPASSWORD
в начале вашей команды следующим образом:
PGPASSWORD=PASSWORD psql YOUR_CODE
Комментарии:
1. Это работает в bash, но не в командной строке Windows.