连接远程PostgreSQL数据库与Matlab

3

我的问题是,当我使用matlab连接到远程psql数据库时,会出现以下错误:

FATAL: password authentication failed for user "[username]"

但是密码是正确的。我已经与数据库管理员确认过了。

我可以通过 PSQL Shell 连接到数据库,这个是可以正常工作的。只有在用 matlab 连接时会出问题。我必须启用 SSL 连接,所以我使用以下代码行:

conn = database('dbname','username','password','org.postgresql.Driver',
    'jdbc:postgresql:dm-userdb.geomar.de:users:ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory&');

遵循matlab文档。

数据库管理员认为问题出在我在matlab中使用的语法上,因为在shell中连接是有效的,但他不熟悉matlab,所以无法帮助我。

此外,当我在我的电脑上创建本地数据库时,我可以用matlab连接它。只有使用matlab连接到远程数据库中的SSL模式时才会出现问题(在SSL关闭时也不起作用)。

使用R或Python连接到此数据库是有效的。对于R来说,代码如下:

install.packages("rpostgres")
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host = "dm-userdb.geomar.de", dbname="users", tty = "NULL", user="****", password = "******", port = "5432")

由于我们将有使用不同软件的用户使用此数据库,因此我们还必须使其与Matlab配合使用,但我不知道我的脚本出了什么问题。

我有一台带有Maverick和Matlab R2013a的MacBook Air。

如果有人知道出了什么问题,那就太好了。


你是否检查了数据库服务器上的 pg_hba.conf 文件?该文件定义了允许连接的主机和连接类型列表。详情请参考:http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html - Ihor Romanchenko
通常情况下,使用 org.postgresql.ssl.NonValidatingFactory 不是一个好主意。相反,您可能想要将服务器证书导入到您的信任存储中。 - Bruno
1个回答

1

我终于找到了一种不使用数据库工具箱的解决方案:

% Add jar file to classpath (ensure it is present in your current dir)
%javaclasspath('postgresql-9.0-801.jdbc4.jar');

% Username and password you chose when installing postgres
props=java.util.Properties;
props.setProperty('user', 'username');
props.setProperty('password', 'password');
props.setProperty('ssl','true');

% Create the database connection
driver=org.postgresql.Driver;
url = 'jdbc:postgresql://databaseURL/dbname';
conn=driver.connect(url, props);

但我无法使用数据库工具箱的其他功能...
我已经尝试了无数种 Matlab 数据库函数的可能性,但它们从未起作用!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接