【发布时间】:2014-08-22 09:13:07
【问题描述】:
我正在使用 Windows 7 上的 ODBC 从 Power Builder 10.5 连接到 Postgresql 数据库。我注意到 PB 将表所有者添加到表名之前,例如,如果我作为“用户”连接到数据库,它将查询格式化为“SELECT x, y, z FROM user.tablename”。
这在 Sybase 中是有意义的,但在 postgres 中不能正常工作,因为模式和用户是分开的。
我通过创建一个与用户同名的 postgres 架构进行测试,然后将表放入架构中。因此,当 PB 使用“username.tablename”时,postgres 将其解释为“schemaname.tablename”并且这有效..但这只是一个测试而不是可用的解决方案。
它在文档中说,如果表所有者与当前用户相同,则 PB 不会在所有者前面添加所有者,但如果它们不匹配,则会。但在我的测试程序中,我看到的是相反的情况:如果 UID 与所有者名称相同,则它会在前面添加,如果它们不匹配,则不会。
这是我的连接代码:
sqlca.DBMS = "ODBC"
sqlca.userid = "pblearn"
sqlca.dbpass = "pblearn"
string ls_DSN = "PBLEARN"
string ls_connect = "ConnectString='"
ls_connect += "DSN=" + ls_DSN + ";"
ls_connect += "UID=" + sqlca.userid + ";"
ls_connect += "PWD=" + sqlca.dbpass + "'"
sqlca.dbparm = ls_connect + ", SQLQualifiers=0"
connect;
我的架构是 pblearn 和 public(默认).. 和两个用户“pblearn”和“pblearn2”。如果我使用 pblearn 连接,会发生前置,我会在 pblearn(表的所有者)架构中看到表,如果我使用 pblearn2,则不会添加用户名,我会在公共架构中看到表。
如何让 PB 不预先添加用户名,或者不考虑用户而预先添加一致的架构名称?
谢谢
【问题讨论】:
-
哪些用户拥有这些架构中的表?
-
在两种模式(public 和 pblearn)中,表都归 pblearn 所有。我所做的是在两个模式中创建一个具有相同名称的表,其中包含不同的数据,因此当我在数据窗口中检索时,很容易看到它正在访问哪个模式。
-
在 PB 中设置数据库配置文件时有一个系统选项卡。如果您将表所有者放入,然后检查“预览”选项卡,您可以看到连接所需的语法。不确定这是否适合您。