Следующая команда работает нормально, то есть не запрашивает пароль, не выводит никаких предупреждений или ошибок, а просто выдает приглашение БД:
$ psql -U dbuser dbname
psql (8.4.10)
Type "help" for help.
dbname=#
При попытке сгенерировать ERD из этой БД с помощью SchemaSpy (работает как тот же пользователь хоста), он не работает:
$ java -jar ~/schemaSpy.jar -dp /usr/share/java/postgresql.jar -t pgsql \
-host localhost -db dbname -u dbuser -o ~/db
Using database properties:
[/[...]/schemaSpy.jar]/net/sourceforge/schemaspy/dbTypes/pgsql.properties
Failed to connect to database URL [jdbc:postgresql://localhost/dbname]
org.postgresql.util.PSQLException: The server requested password-based
authentication, but no password was provided.
Если я попробую ввести пустой пароль ( -p ''
), вместо этого он напечатает:
org.postgresql.util.PSQLException: FATAL: password authentication failed for
user "dbuser"
Как запустить SchemaSpy в базе данных PostgreSQL с пользователем БД, у которого нет пароля?
Я попытался изменить настройки pg_hba.conf
на полностью разрешающие, но он все равно не работает:
$ sudo grep ^local /etc/postgresql/*/main/pg_hba.conf
local all postgres ident
local all all trust
Найденный ответом, связанным с подобной проблемой с pgAdmin III: Обе программы (в отличие от этого, psql
) установите соединения TCP/IP, а не сокетные соединения Unix, таким образом, соответствующая строка в /etc/postgresql/*/main/pg_hba.conf
этот, который приведет к подсказке пароля, даже если пароль будет пуст.
host all all 127.0.0.1/32 md5
Для фиксации этого необходимо доверять соединениям от localhost, например, со следующей строкой:
host all all 127.0.0.1/32 trust
и перезагрузка конфигурация:
sudo service postgresql reload
Теперь и SchemaSpy и pgAdmin должны смочь соединиться.