PostgreSQL 难以捉摸的“列不存在”错误:案例研究
Java 开发人员经常在 PostgreSQL 中遇到令人困惑的“列不存在”错误,即使列在数据库中明确定义也是如此。当构建直接从数据库获取列名的动态查询时,经常会发生这种情况。
让我们检查一个典型的情况:用户尝试从驻留在“network”架构中的“countries”表中的“Continent”列检索非空、非空值。 初始查询是:
<code class="language-sql">SELECT Continent FROM network.countries WHERE Continent IS NOT NULL AND Continent <> '' LIMIT 5</code>
执行此查询会产生令人沮丧的错误:
<code>org.postgresql.util.PSQLException: ERROR: column "continent" does not exist</code>
PostgreSQL 使用“countries.Continent”的建议具有误导性,因为该列在 pgAdmin 4 中的存在是不可否认的。
解决方案:双引号的重要性
问题源于列名周围缺少双引号。 在动态查询中,在列名周围使用双引号对于防止命名冲突至关重要。这迫使 PostgreSQL 将名称视为文字字符串,避免潜在的误解。
包含双引号的更正查询是:
<code class="language-sql">SELECT "Continent" FROM network.countries WHERE "Continent" IS NOT NULL AND "Continent" <> '' LIMIT 5</code>
此修改后的查询可以正确执行,返回预期结果 - 非空和非空“大陆”值。 请记住在动态 SQL 中始终使用双引号列名称以避免这种常见的陷阱。
以上是为什么即使列存在,PostgreSQL 也会抛出'列不存在”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!