我在目标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程序无法访问该表。当程序试图访问它时会抛出异常,该异常表示配置表的“未定义关系”。
我的问题是:
注意: 我检查了目标postgres数据库,虽然SQL工作台可以查询它,但无法在任何地方看到Config表。然后我打开另一个SQL工作台实例,发现无法查询表(即找不到)。所以,我的结论是PostgreSQL将我在第一个运行的SQLBench实例中创建的表放入绑定到该会话的某个血腥位置。另一个SQL Workbench实例或我的java程序没有绑定到session,因此无法查询以前创建的表配置。
答案 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) -- >> ,
);