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

标签 postgresql create-table

我已在目标 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 程序无法访问该表。当程序尝试访问它时会抛出异常,显示配置表的“未定义关系”。

我的问题是:

  1. 为什么我之前运行 create 语句的 sqlworkbench 可以识别该表,而我的 java 程序却找不到它?
  2. 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/

相关文章:

postgresql - 如何统计一个用户与多个表的连接数?

java - postgresql存储过程中的结果集就像java一样

PostgreSQL - 更改默认权限....在表上选择...在所有模式中

sql-server - 在 Toad/SQL Navigator 中生成 "Create Table"脚本

mysql - 是否不可能有一个检查约束引用一个也有外键的列?

sql - hstore 标签上的 PostGis 搜索查询

python - django postgresql 查询不工作

postgresql - Postgres 表列名限制?

sql - 缺少右括号?

sql - 如何在 Oracle 的过程中创建表?