我有一个在linux机器上运行的PostgreSql本地实例.当我使用shell中的psql命令时,我成功登录,没有任何问题.我需要通过JDBC连接到PostgreSql,但我不知道应该将什么作为url参数传递给DriverManager.getConnection().

应该从jdbc:postgresql:开始,但接下来会发生什么?

系统组告诉我,创建了一个类似用户名的数据库.e、 g.如果我的用户是jutky,则会创建一个名为jutky的数据库,但当我try 打开与jdbc:postgresql:jutky的连接时,会出现错误

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

Additional info

当我通过psql登录时,我不会被提示输入密码,所以当我try 通过JDBC登录时,我会传递一个空字符串作为密码——这是正确的,还是应该传递null或其他什么?

当我在shell中键入psql --help时,我在其余部分中看到这一行:

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

所以我知道我通过socket directory连接到PostgreSql,这对JDBC中的URL字符串有什么影响吗?


EDIT

首先谢谢你的回答.

第二:这不是我第一次使用JDBC,尤其不是我第一次从JDBC连接PostgreSql,所以我知道一般规则,并且我已经阅读了文档.然而,在所描述的情况下,如果实例通过socket directory运行,我不确定应该如何构造连接字符串,以及应该提供什么密码.因为当我通过psql登录时,我根本不会被提示输入密码.

提前谢谢.

推荐答案

除了其他答案,请注意,默认情况下,Postgres配置为通过Unix套接字接受连接,并基于您的操作系统帐户进行身份验证,这就是为什么psql可以正常工作,并且不需要密码.

JDBC连接是通过TCP/IP进行的,带有密码验证,因此需要相应地修改pg_hba.conf.例如,这一行允许所有用户通过密码验证从同一台机器到所有数据库的TCP/IP连接:

host    all         all         127.0.0.1/32          md5

添加此行后,jdbc:postgresql:databasename应该可以工作.

EDIT:您无法通过Unix套接字创建JDBC连接,因为PostgreSQL JDBC驱动程序只能在TCP/IP上工作.创建JDBC连接时使用的密码是分配给用户的密码.如果没有,可以指定它,例如,使用ALTER USER命令.见19.3. Authentication methods.

See also:

Postgresql相关问答推荐

无法从Docker迁移Golang上的两个不同服务到一个数据库'

在Docker Compose中获取CSV文件数据?

为MCV扩展统计设置统计目标

使用Helm设置PostgreSQL配置

PostgreSQL临时文件的误解

如何在docker-compose中使用docker secrets设置ConnectionString?

返回行值和行计数的总和

转到 time.Time to postgresql timestamptz 无法用 time.Now() 保存

如何使用 SQLAlchemy 将列默认设置为 PostgreSQL 函数?

PostgreSQL错误致命:角色 username不存在

从 Postgres 字段中的多个值中进行 Select

如何从 WSL 连接到 windows postgres 数据库

遇到序列化失败的条件是什么?

postgresql 在查询中插入空值

从没有行的计数中获取 0 值

SQL - 提示引用列

使用枚举与布尔值?

PostgreSQL 中是否有类似 zip() 函数的东西,它结合了两个数组?

如何在postgresql中编写关于最大行数的约束?

SQL:子查询的列太多