Подключение к локальному экземпляру PostgreSql с JDBC - PullRequest
21 голосов
/ 30 декабря 2010

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

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

Системная группа сказала мне, что база данных была создана как имя пользователя. например если мой пользователь jutky, была создана БД с именем 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?


EDIT

Сначала спасибо за ответы.

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

Заранее спасибо.

Ответы [ 2 ]

27 голосов
/ 30 декабря 2010

В дополнение к другим ответам обратите внимание, что по умолчанию 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, поскольку драйвер PostgreSQL JDBC может работать только через TCP / IP. Пароль, который вы используете при создании соединения JDBC, - это пароль, назначенный вашему пользователю. Если у вас его нет, вы можете назначить его, например, с помощью команды ALTER USER. См. 19.3. Методы аутентификации .

Смотри также:

8 голосов
/ 30 декабря 2010

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

Это соответствующая часть:

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