首頁 >資料庫 >mysql教程 >為什麼即使列存在,PostgreSQL 也會拋出「列不存在」錯誤?

為什麼即使列存在,PostgreSQL 也會拋出「列不存在」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-20 20:38:10731瀏覽

Why Does PostgreSQL Throw a

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn