我正在编写一个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中会出现“column does not exist”错误。我可以看到有一个名为Network
的模式,其中包含表countries
,该表中有一个名为Continent
的列,正如所预期的那样。
既然所有的列名、模式名和表名都是由应用程序本身检索的,我不认为存在拼写或语义错误,那么为什么PostgreSQL会导致问题呢?在pgAdmin4中运行查询或使用建议的countries.Continent
都是有效的。
我的PostgreSQL版本是目前最新的:
$ psql --version
psql (PostgreSQL) 9.6.1
如何成功运行查询?
5条答案
按热度按时间llycmphe1#
请尝试将其用双引号括起来,例如查询中的
"Continent"
:aiqt4smr2#
在使用SQLAlchemy环境时,我遇到了这样的SQL错误,
错误:列“plaza”不存在
好吧,我改变了==,错误仍然存在,然后我交换了引号,如下所示。它的工作。奇怪!
h7appiyu3#
这个问题发生在postgres中,因为表名不是tablename,而是“tablename”。例如,如果它将用户显示为表名,那么表名是“user”。
请看:
3zwtqj6y4#
当您在数据行名称中错误地加入空格(例如“users“)时,可能会发生这样的错误。
kd3sttzy5#
当我在RedShift中执行
PIVOT
时,我得到了同样的错误。我尝试了不带引号的year_month(出现错误),带双引号的year_month(出现错误),最后带单引号的year_month(这次成功了)。如果有人在同样的情况下喜欢我的例子,这可能会有所帮助。