【问题标题】:Postgres table visible in psql, not from jdbc在 psql 中可见的 Postgres 表,而不是来自 jdbc
【发布时间】:2014-02-11 19:19:15
【问题描述】:

我在 Postgres 9.1 数据库中创建了一个名为 inventory 的表。我已经能够从 psql 中选择、插入等。

但是,我正在尝试从 web 应用程序的服务器访问此表。我已将服务器代码(使用 JDBC)安装在与 Postgres 数据库相同的机器上。当我尝试从 JDBC 代码访问库存表时,我收到此错误:

org.postgresql.util.PSQLException:错误:关系“库存”不存在

我已确保我使用相同的用户名,我在用于创建连接的属性、我在 psql 中检查的用户以及从 JDBC 元数据中获取用户名之间保持一致运行时。

奇怪的是,我在笔记本电脑上进行了类似的设置(托管 Tomcat 和 webapp 以及 postgres 安装都在那里),但是当我在服务器上托管 db 和 webapp 时设置不起作用。

由于它适用于一台机器而不是另一台机器,我认为以下是可能的解释:

  1. 我的用户配置有问题。从服务器上的 JDBC 访问可能是 Postgres 用户权限错误(我没有在服务器上设置 Postgres 安装)。
  2. 我遇到了错误的架构。我怎么知道?
  3. 不知何故我打错了机器。我试过select inet_server_addr();,但它只说127.0.0.1,这不是很有用。有没有更好的检查方法?

在另一个对话中("relation not found" using Postgres within an Eclipse Hibernate application),我看到很多人试图帮助想知道该表是否出现在 psql 中。对于那个问题,答案是否定的,他只需要创建表。对我来说,答案是肯定的,我就是看不到桌子。

知道为什么我可以连接到数据库但看不到我的用户拥有的表吗?

谢谢

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    这必须是几种可能性之一:

    • 您连接到错误的服务器。
    • 您连接到正确服务器上的错误数据库
    • 您的search_path 在两个连接之间有所不同
    • 两个连接之间的标识符引用不同
    • 你打错了

    对于前两个,使用 PgJDBC 连接,设置 application_name,然后从 psql 查询 pg_stat_activity 以确保连接到您期望的服务器,到您期望的 DB。

    对于 search_path,两个连接上的 SHOW search_path;。比较。还要查看psql 中的\dt inventory,注意表所在的架构,并尝试通过其在 PgJDBC 中的限定名称来访问它,例如someschema.inventory.

    引用:就是这样,表可能被命名为“Inventory”还是“INVENTORY”?如果是这样,您是否可以在一个地方将其称为INVENTORY,而在另一个地方将其称为"INVENTORY"?根据 SQL 标准,除非引用,否则 Pg 大小写折叠。

    【讨论】:

    • 谢谢。问题是我有两个名称相似的数据库,而我只是连接到错误的数据库。 pg_stat_activity 中的查询说明了这一点。
    猜你喜欢
    • 2020-06-14
    • 2015-03-30
    • 2012-07-30
    • 2020-07-08
    • 1970-01-01
    • 2019-05-07
    • 2022-01-18
    • 2013-02-24
    相关资源
    最近更新 更多