我已在目标 postgresql 数据库中使用 SQLWorkbench 执行了以下创建语句:
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 程序无法访问该表。当程序尝试访问它时会抛出异常,显示配置表的“未定义关系”。
我的问题是:
- 为什么我之前运行 create 语句的 sqlworkbench 可以识别该表,而我的 java 程序却找不到它?
- postgressql DBMS 将我创建的表放在哪里?我在公共(public)场合和信息模式中都没有看到它们。
注意: 我检查了目标 postgres 数据库,但在任何地方都看不到表 Config,尽管 SQL Workbench 可以查询它。然后我打开另一个 SQL 工作台实例,发现无法查询该表(即未找到)。因此,我的结论是 PostgreSQL 将我在第一个运行的 SQLBench 实例中创建的表放入与该 session 绑定(bind)的某个位置。另一个 SQL Workbench 实例或我的 java 程序未绑定(bind)到 session ,因此无法查询之前创建的表配置。
最佳答案
PostgreSQL 中 session 本地的唯一“该死的位置”是模式 pg_temp,换句话说:临时表。但您的 CREATE
命令不显示关键字 TEMP[ORARY]
。当然,只要交易没有提交,没有人会看到交易之外的任何内容。
您更有可能看到主机/数据库/端口/或模式search_path
的切换。大小写混合表名的混合也是一个热门候选。如果您不使用双引号 "Config"
,则该表在系统中将全部小写,因此:config
。如果您稍后双引号该名称,它将不匹配。 The manual has the details .
关于postgresql - PostgreSQL 中的表不可见 - 不同 session 中未定义的关系问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566776/