Подтвердить что ты не робот

Подключение к локальному экземпляру PostgreSql с JDBC

У меня есть работающий локальный экземпляр PostgreSql на Linux-машине. Когда я использую команду psql из командной строки, мне удалось войти в систему без каких-либо проблем. Мне нужно подключиться к PostgreSql через JDBC, но я не знаю, что именно следует передать как url для параметра DriverManager.getConnection().

Он должен начинаться с jdbc:postgresql:, но что будет дальше?

Мне сообщили системной группе, что база данных была создана как имя пользователя. например если мой пользователь jutky был создан db с именем jutky, но когда я пытаюсь открыть соединение с jdbc:postgresql:jutky, я получаю сообщение об ошибке

org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky" : (

Дополнительная информация

Когда я вхожу в систему через psql, мне не будет предложено ввести пароль, поэтому, когда я пытаюсь войти в систему через JDBC, я передаю пустую строку в качестве пароля - это правильно или мне нужно передать null или что-то еще

Когда я ввожу psql --help в оболочку, я вижу среди остальных эту строку:

Connection options:
   -h, --host=HOSTNAME      database server host or socket directory (default: "/var/run/postgresql")

Итак, я понимаю, что подключаюсь к PostgreSql через socket directory, что-то имеет значение для строки URL-адреса в JDBC?


ИЗМЕНИТЬ

Первое спасибо за ответы.

Во-вторых: это не первый раз, когда я использую JDBC и, в частности, не в первый раз, когда я подключаюсь к PostgreSql из JDBC, поэтому я знаю общие правила, и я прочитал документацию. Однако в описанном случае я не уверен, как именно я должен построить строку соединения, если экземпляр работает через socket directory и какой пароль я должен предоставить. Потому что, когда я вхожу в систему через psql, я не запрашиваю пароль вообще.

Спасибо заранее.

4b9b3361

Ответ 1

В дополнение к другим ответам обратите внимание, что по умолчанию Postgres настроен на прием соединений через Unix-сокеты с аутентификацией на основе вашей учетной записи операционной системы, поэтому psql работает нормально и не требует пароля.

Соединения JDBC выполняются через TCP/IP с аутентификацией пароля, поэтому вам необходимо изменить pg_hba.conf соответственно. Например, эта строка позволяет соединениям TCP/IP с одного компьютера со всеми базами данных для всех пользователей с аутентификацией пароля:

host    all         all         127.0.0.1/32          md5

После добавления этой строки jdbc:postgresql:databasename должно работать.

РЕДАКТИРОВАТЬ: Невозможно создать соединение JDBC через сокет Unix, поскольку драйвер JDBC PostgreSQL может работать только через TCP/IP. Пароль, который вы используете при создании соединения JDBC, - это пароль, назначенный вашему пользователю. Если у вас его нет, вы можете назначить его, например, с помощью команды ALTER USER. См. 19.3. Методы проверки подлинности.

См. также:

Ответ 2

Все объяснено в официальной документации .

Это важная часть:

String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);