在使用PostgreSQL資料庫時,經常需要檢查表格是否存在於特定的模式中。尤其是在表格可能同時存在於公共模式和公司特定模式的情況下,這種驗證就變得至關重要。
類似於問題中描述的情況,表可能存在於各種「公司」模式中(例如,company1、company2、companynn),並且應該只在這些特定的模式中進行檢查,這帶來了以下挑戰:
為了有效地解決這個問題,避免依賴資訊模式,因為它可能由於使用者權限而無法準確反映表的是否存在。相反,直接查詢系統目錄pg_class和pg_namespace以獲得準確的結果。可以使用以下查詢:
<code class="language-sql">SELECT EXISTS ( SELECT FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'schema_name' AND c.relname = 'table_name' AND c.relkind = 'r' -- only tables );</code>
此查詢可確保在指定的'schema_name'中檢查表的是否存在,並排除其他模式。
另一種方法涉及將表名轉換為'regclass':
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
如果表在指定的模式中不存在,此方法將引發異常。處理此異常可以提供必要的驗證。
This revised output maintains the original formatting and image, while rewording sentences and paragraphs to achieve paraphrasing without changing the core meaning. The technical content remains intact.
以上是我的 PostgreSQL 表是否存在於特定架構中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!