【问题标题】:Table invisible in PostgreSQL - Undefined relation issue at different sessions表在 PostgreSQL 中不可见 - 不同会话中的未定义关系问题
【发布时间】: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 程序无法访问该表。当程序尝试访问它时会引发异常,并显示配置表的“未定义关系”。

我的问题是:

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

标签: postgresql create-table


【解决方案1】:

PostgreSQL 中唯一的会话本地“血腥位置”是模式pg_temp,换句话说:临时表。但是您的CREATE 命令不显示关键字TEMP[ORARY]。当然,只要 transaction 没有commited,没有人会看到事务之外的任何东西。

您更有可能看到主机/数据库/端口/或架构search_path的切换。混合大小写的表名也是一个热门候选者。如果您不使用双引号 "Config",则该表在系统中将全部小写,因此:config。如果您稍后双引号该名称,它将不匹配。 The manual has the details.

【讨论】:

  • 我在创建数据库命令之后发出了一个提交,但没有帮助。我在 SQL 工作台和我的 Java 程序中都以小写形式查询数据库。谢谢。
【解决方案2】:

也许在多余的尾随逗号上创建失败?

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

【讨论】:

  • Right after table creation I request the table content by typing 'select * from config;' and see that table could be retrieved. 所以,可能不会。
  • 当我将创建语句粘贴到此处时,我不得不从创建语句中删除一些公司特定的字段名称,所以显然删除这些字段名称后留下了一个逗号,但原始创建语句很好并成功执行.
  • 这只是一个疯狂的猜测,因为您的问题似乎有点怪异。顺便说一句,我们中的一些人(包括 Erwin 和我自己)习惯于将逗号放在行首。这使它们更加明显,并且使编辑更容易。
猜你喜欢
  • 1970-01-01
  • 2021-09-21
  • 2012-07-24
  • 2014-10-24
  • 2016-02-11
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多