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中文網其他相關文章!