我正在编写一个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
如何成功运行查询?
答案 0 :(得分:16)
尝试将其引入双引号 - 例如查询中的ggplot(df, aes(Year, Degrees)) +
stat_summary(fun.y = mean, fun.ymin = min, fun.ymax = max, col = 'red')
:
"Continent"
答案 1 :(得分:0)
在使用SQLAlchemy环境时,这样的SQL出现了此错误,
db.session.execute(
text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))
错误:列“广场”不存在
好吧,我将==更改为=,错误仍然存在,然后我将引号互换,如下所示。有效。奇怪!
....
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))
答案 2 :(得分:0)
发生此问题的原因是在pgAdmin3中,因为表名不是表名,而是表名。 例如 如果显示用户为表名, 表名称是“用户”。
看到这个: