42P01 Error: relation does not exist
公司專案的正式機與測試機,突然登入異常,錯誤訊息如下:
System.AggregateException: One or more errors occurred. (42P01: relation “auth_users” does not exist)
檢查資料庫的關聯與資料,一切正常,但發現幾個未知的schema。
在錯誤發生位置 TryCatch 後,從取得的 SQL 語法中,發現語法少了`public` schema的前綴(如下),導致無法存取到對應的資料。
SELECT * FROM auth_users;
但實際上用以下語法,在資料庫執行,可以成功查詢表中的資料。
SELECT * FROM public.auth_users;
當下判斷是程式無法存取到對應的schema,因此先刪除其餘未知的schema,但並未解決 42P01 異常。
最後是調整資料庫設定: database > properties > parameters > search_path ,刪去除了 ”$user”, public 以外的選項,成功排除 42P01 異常。
Postgres 的 connection string 無法指定 database 中的 schema,但另外查到可以在程式 Context > OnModelCreating 中,用 HasDefaultSchema 去指定shcema。可參考以下文件:
42501: permission denied
為了實測 HasDefaultSchema 是否能指定 schema,必須在資料庫建 2 個以上的 schema 及 search_path,還原 42P01 異常。
但在本機連測試資料庫,遇到 42501 異常,測試帳號無法成功將資料寫入資料庫。有的表可以寫入,但有的表卻不能寫入。會出現錯誤訊息:
[42501]ERROR: permission denied for schema public
最後利用 GrantWizard 中,選擇授權的對象與內容,並在執行語法後,成功排除 42501 異常。
最後在本機建立 2 個 schema 與 search_path 後,並沒有遇到 42P01 異常,本機的網站是可以正常登入,也能讀取資料。判斷 42P01 問題,資料庫可能還有其他設定。因此,暫時無法測試 HasDefaultSchema。
若有謬誤,煩請告知,新手發帖請多包涵 (此句以致敬某前輩 XD)
感謝各位(・∀・)つ