我使用odbcinst和正确的模板文件来生成我的.odbc.ini文件。我知道这是正确的,因为我用它用不同的用户名/密码组合连接到不同服务器上的不同Postgres数据库。”在我的开发机器上工作,”俗话说。
在这个目标机器上,我已经更改了服务器、用户名和密码以匹配我希望它连接的位置。
因此,在bash命令行上,我使用以下方法进行测试:
$ isql -v myDSN
这就产生了:
[28000][unixODBC]FATAL: password authentication failed for user "myUser"
[ISQL]ERROR: Could not SQLConnect
呃,好吧,让我们试试这个:
$ isql -v myDSN myUser myPassword
这将产生:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Neato,但当“myPassword”被剪切和粘贴以确保它是相同的时,就相当神秘了。
好的,那么,在我的二进制文件中,我可以使用以下命令,而不是使用'DSN=myDSN'作为传递到命令行的连接字符串:
$ my_bin --myArgs --dsn Driver={PostgreSQL\ Unicode}\;Servername=myServer\;Database=myDatabase\;UID=myUser\;PWD=myPassword
[unixODBC]FATAL: password authentication failed for user "myUser"
(当然,使用
--dsn DSN=myDSN
此密码正确。如果我使用所有三个命令行参数进行调用,我可以建立连接并在isql中使用它。但是,由于某种原因,在这种环境下,其他一些东西阻止了我正确地做这件事。
在这个连接的实际密码中,我使用了一个“#”字符。这是唯一一个能以任何方式引起问题的奇怪的角色。我知道bash在命令行中并没有对它做任何奇怪的处理,因为我在可执行文件的stdout中看到它被引用了,我已经尝试在它前面加上\以确保它被正确地转义,以防bash对它做了不愉快的事情。
我不能用isql做我想做的事。。。我可能请求的数据集需要一些C++(或类似的)爱好。
再调查一些,我做了以下工作:
-
-
将.odbc.ini文件更改为使用相同的服务器和数据库,但更改了登录名以匹配失败的登录名。然后,我将该角色/密码添加到dev Postgres引擎中,与目标Postgres引擎上的目标帐户匹配。这个失败了。因此,我认为问题可能与密码有关。
有什么建议吗?