【发布时间】:2017-05-26 06:34:36
【问题描述】:
我正在编写一个Java 应用程序来自动构建和运行 SQL 查询。对于许多表,我的代码可以正常工作,但在某个表上它会因抛出以下异常而卡住:
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist
Hint: Perhaps you meant to reference the column "countries.Continent".
Position: 8
已经运行的查询如下:
SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5
这实际上从列中返回5 非空值。
我不明白为什么在 pgAdmin 4 中明显出现“列不存在”错误。我可以看到有一个名为 Network 的架构,其中包含表 countries,并且该表有一个名为 Continent 的列,正如预期的那样。
由于所有列、模式和表名都是由应用程序本身检索的,我认为没有拼写或语义错误,那么为什么PostgreSQL 无论如何都会导致问题?在 pgAdmin4 中运行查询或使用建议的 countries.Continent 是有效的。
我的 PostgreSQL 版本是目前最新的:
$ psql --version
psql (PostgreSQL) 9.6.1
我怎样才能成功运行查询?
【问题讨论】:
-
PostgreSQL 区分大小写
-
@wingedpanther:如果您使用那些可怕的带引号的标识符,它仅区分大小写。
-
不相关,但是:
psql --version为您提供psql的版本,而不是服务器的版本
标签: sql postgresql quoted-identifier