Postgresql
為什麼在 PostgreSQL 中名稱“循環”的處理方式不同
我發出以下 DDL:
CREATE TABLE foo ( loopa INTEGER, loop INTEGER );
然後,檢查伺服器中的 DDL(使用像DbVisualizer這樣的客戶端工具- 抱歉不知道直接生成它的查詢)我看到以下內容:
CREATE TABLE foo ( loopa INTEGER, LOOP INTEGER );
觀察命名列的大小寫變化,
loop
但不觀察命名列的變化loopa
。查看SQL 關鍵字loop
列表似乎不是關鍵字。那麼,為什麼會有這種選擇性的變化呢?這似乎與我在嘗試訪問
loop
我得到的表中的列時遇到的問題有關:Exception in thread "main" org.postgresql.util.PSQLException: ERROR: record "new" has no field "loop"
(無論觸發器函式中的程式碼是否以
NEW.LOOP
或訪問該欄位,我都會得到相同的錯誤NEW.loop
)更新
大寫似乎是 DbVisualizer 的產物。
psql
顯示:psql (9.1.13) Type "help" for help. foo-test=> \dS+ foo Table "test.foo" Column | Type | Modifiers | Storage | Description --------+---------+-----------+---------+------------- loopa | integer | | plain | loop | integer | | plain | Has OIDs: no
然而,這仍然不能解釋為什麼 PostgreSQL 引擎顯然不允許我的觸發器訪問
NEW.loop
. 當我將列(和触發程式碼)重命名為loopi
一切似乎工作正常。因此,這裡可能有一些更深層次的東西在起作用,而不僅僅是 DbVisualizer 故障。稍後我將嘗試創建一個 SSCCE。更新 2
已在此處創建了觸發問題的 SSCCE 。
單詞 LOOP 是 PL/pgSQL 中的保留字。如果要將其用作列名,則需要將其引用。