在 psql 中可见的 Postgres 表,而不是来自 jdbc
Posted
技术标签:
【中文标题】在 psql 中可见的 Postgres 表,而不是来自 jdbc【英文标题】:Postgres table visible in psql, not from 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 时设置不起作用。
由于它适用于一台机器而不是另一台机器,我认为以下是可能的解释:
-
我的用户配置有问题。从服务器上的 JDBC 访问可能是 Postgres 用户权限错误(我没有在服务器上设置 Postgres 安装)。
我遇到了错误的架构。我怎么知道?
不知何故我打错了机器。我试过
select inet_server_addr();
,但它只说127.0.0.1,这不是很有用。有没有更好的检查方法?
在另一个对话中("relation not found" using Postgres within an Eclipse Hibernate application),我看到很多人试图帮助想知道该表是否出现在 psql 中。对于那个问题,答案是否定的,他只需要创建表。对我来说,答案是肯定的,我就是看不到桌子。
知道为什么我可以连接到数据库但看不到我的用户拥有的表吗?
谢谢
【问题讨论】:
【参考方案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 中的查询说明了这一点。以上是关于在 psql 中可见的 Postgres 表,而不是来自 jdbc的主要内容,如果未能解决你的问题,请参考以下文章
Docker - 如何在postgres容器中运行psql命令?
Postgres 选择查询在使用 JDBC 时运行缓慢,但在从同一服务器在 PSQL 中运行时快速
可以在 phpPgAdmin 中查看表,但不能在 psql(或任何其他方法)中查看表