【发布时间】:2012-03-05 12:38:08
【问题描述】:
我在我的目标 postgresql 数据库中使用 SQLWorkbench 执行了以下创建语句:
CREATE TABLE Config (
id serial PRIMARY KEY,
pub_ip_range_low varchar(100),
pub_ip_range_high varchar(100)
);
在创建表后,我通过键入“select * from config;”请求表内容并看到可以检索该表。然而,当我在其中发出相同的选择语句时,我使用 JDBC 4 类驱动程序的 java 程序无法访问该表。当程序尝试访问它时会引发异常,并显示配置表的“未定义关系”。
我的问题是:
- 为什么我之前运行 create 语句的 sqlworkbench 可以识别该表,而我的 java 程序却找不到它?
- postgressql DBMS 将我创建的表放在哪里?我在公共场合和信息架构中都没有看到它们。
注意: 我检查了目标 postgres 数据库,尽管 SQL 工作台可以查询它,但在任何地方都看不到表 Config。然后我打开另一个 SQL 工作台实例,发现无法查询该表(即未找到)。因此,我的结论是 PostgreSQL 将我在第一个运行的 SQLBench 实例中创建的表放入绑定到该会话的某个位置。另一个 SQL Workbench 实例或者我的 java 程序没有绑定 session,所以无法查询之前创建的表配置。
【问题讨论】:
-
尝试在 SQLWorkbench 中运行
SELECT current_schema()以检查您在哪个模式中创建表。也尝试在 java 中检查您正在查询哪个模式。您有任何未结交易吗? -
尽量避免混合大小写标识符。它们可能会导致混乱。
-
上述select语句返回public。我试图通过键入 public.config 从我的 java 程序中查询表,但根本没有帮助我解决问题。还是谢谢/还有什么建议吗?
-
故障排除指南: 1 检查/监控日志文件。 2)消除中间人:通过psql或pgadmin[3]连接到数据库。
-
你检查权限了吗?确保您连接的用户可以访问架构(默认情况下应该是架构
public)和表。