postgresql“列不存在”,但它确实存在

qyyhg6bp  于 2021-08-01  发布在  Java
关注(0)|答案(3)|浏览(444)

我在写一封信 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

如何成功运行查询?

pkmbmrz7

pkmbmrz71#

试着把它用双引号括起来-就像 "Continent" 在查询中:

SELECT "Continent"
FROM network.countries
...
d6kp6zgx

d6kp6zgx2#

发生此问题的原因是,在pgadmin3中,表名不是tablename,而是“tablename”。例如,如果将user显示为表名,则表名为“user”。
看这个:

zf2sa74q

zf2sa74q3#

在使用sqlalchemy环境时,我在sql中遇到了这样的错误,

db.session.execute(
    text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))

错误:“广场”列不存在
好吧,我改了==by=,错误仍然存在,然后我交换了引号,如下所示。成功了。奇怪的!

.... 
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))

相关问题