48

我正在编写一个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

如何成功运行查询?

4

3 回答 3

68

尝试将其放入双引号中 - 就像"Continent"在查询中一样:

SELECT "Continent"
FROM network.countries
...
于 2017-01-11T12:50:24.977 回答
6

在使用 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' "))
于 2018-08-07T15:10:26.417 回答
5

这个问题出现在 postgres 中,因为表名不是表名而是“表名”。例如。如果将用户显示为表名,则表名是“用户”。

看到这个:

表用户的图像

于 2018-11-17T09:48:21.940 回答