PostgreSQL中不可见的表 - 不同会话中的未定义关系问题

时间:2012-03-05 12:38:08

标签: postgresql create-table

我在目标postgresql数据库中使用SQLWorkbench执行了以下create语句:

  CREATE TABLE Config (    
  id serial  PRIMARY KEY,       
  pub_ip_range_low  varchar(100),       
  pub_ip_range_high varchar(100)            
  );

创建表后,我通过输入'select * from config;'来请求表内容。并看到该表可以被检索。然而,当我在其中发出相同的select语句时,使用JDBC类型4驱动程序的java程序无法访问该表。当程序试图访问它时会抛出异常,该异常表示配置表的“未定义关系”。

我的问题是:

  1. 为什么我之前运行create语句的sqlworkbench会识别该表,而我的java程序却找不到它?
  2. postgressql DBMS将我创建的表放在哪里?我既没有在公共场合也没有在信息架构中看到它们。
  3. 注意: 我检查了目标postgres数据库,虽然SQL工作台可以查询它,但无法在任何地方看到Config表。然后我打开另一个SQL工作台实例,发现无法查询表(即找不到)。所以,我的结论是PostgreSQL将我在第一个运行的SQLBench实例中创建的表放入绑定到该会话的某个血腥位置。另一个SQL Workbench实例或我的java程序没有绑定到session,因此无法查询以前创建的表配置。

2 个答案:

答案 0 :(得分:2)

PostgreSQL中唯一一个会话本地的“血腥位置”是架构pg_temp,换句话说:临时表。但是您的CREATE命令不会显示关键字TEMP[ORARY]。当然,只要事务不是提交,就没有人能看到交易之外的任何内容。

您更有可能看到主机/数据库/端口/或模式search_path的切换器。混合大小写表名称的混合也是一个热门候选人。如果您没有引用"Config",则表格会以系统中的所有小写结尾,因此:config。如果您稍后双引号,则不匹配。 The manual has the details

答案 1 :(得分:0)

也许创建在额外的尾随逗号上失败了?

 CREATE TABLE config (
  id serial  PRIMARY KEY,       
  pub_ip_range_low  varchar(100),       
  pub_ip_range_high varchar(100)   -- >> ,           
  );