決定 PostgreSQL 架構中的資料表是否存在
PostgreSQL 資料庫經常使用模式,包括公共模式和不同組織的自訂模式。 這就需要可靠的方法來確認特定模式中表格的存在。
訊息模式的限制
雖然資訊模式提供了資料庫表的視圖,但它僅限於目前使用者可以存取的表。 此限制可能會產生漏報。 以下使用資訊模式的查詢可能無法準確反映表格的存在:
<code class="language-sql">SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_schema = 'schema_name' AND table_name = 'table_name' );</code>
使用系統目錄的可靠方法
要進行更全面的檢查,請利用 PostgreSQL 的系統目錄。 下面的查詢使用 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>
如果表存在,則此查詢傳回true
。
用於表存在驗證的型別轉換
另一種技術涉及將表標識符轉換為 regclass
類型。 成功的轉換意味著該表的存在;失敗會導致異常。
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
使用 to_regclass
(PostgreSQL 9.4 及更高版本)
對於 PostgreSQL 9.4 及後續版本,to_regclass
函數提供了更健壯的解決方案。 如果表不存在,則回傳 NULL
,避免異常:
<code class="language-sql">SELECT to_regclass('schema_name.table_name');</code>
以上是如何可靠地檢查特定 PostgreSQL 模式中表格是否存在?的詳細內容。更多資訊請關注PHP中文網其他相關文章!