科技 · 實用指南
PostgreSQL 顯示 relation does not exist?先指紋化失敗工作階段
SQLSTATE 42P01 常表示應用與管理終端在不同資料庫、schema 或工作階段解析名稱。先做唯讀探針,再修正已證明的分支。

pgAdmin 或 psql 看得到資料表,應用仍可能回報 relation 不存在。要確認的是失敗工作階段實際使用的伺服器、資料庫、角色與搜尋路徑。
不要先重建資料表、全域修改 search_path 或廣泛授權;先保留錯誤並在原連線擷取唯讀指紋。
擷取精確失敗工作階段
在產生 42P01 的同一連線池、交易與角色中記錄資料庫、位址埠號、使用者、角色與有效 schema。
逐字保存 relation 標記、引號、schema 與 SQLSTATE;管理終端也取得相同指紋。
不改狀態地解析名稱
對未限定與 schema 限定名稱分別使用 to_regclass,再查 pg_class 與 pg_namespace。
兩者皆 NULL 且目錄無匹配時,查錯誤資料庫、未執行或回滾遷移、刪除物件或別的暫存工作階段。
分開大小寫、可見性與權限
比較目錄拼字與 SQL。建立為 "Orders" 的物件必須精確引用。
限定名稱存在卻無法存取時,分別檢查 schema USAGE、資料表權限與 API 暴露設定。
比較遷移或管理工作階段
在實際遷移工具或交易內跑相同指紋,比較端點、資料庫、角色與有效 schema。
未提交 CREATE、失敗遷移、不同租戶或暫存表不能靠改 search_path 解決。
套用單一窄修正並驗證
穩定物件使用 schema 限定名;若有意依賴未限定名,審查角色或連線初始化後重連池。
重命名與授權都要精準,證明遷移目標前不要重建同名表;最後以新應用連線重跑原查詢。
