驗證特定 PostgreSQL 模式中的表格是否存在
PostgreSQL 資料庫在模式中組織表格。 若要確認表格是否存在於指定模式中,請使用下列方法:
方法一:直接系統目錄查詢
此方法直接詢問pg_class
系統目錄:
<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' -- restricts to tables only );</code>
方法二:資訊模式查詢(有註意事項)
使用 information_schema
(例如 information_schema.tables
)看似簡單,但請注意:權限限制可能會導致漏報。 如果您需要驗證目前使用者的存取權限,此方法非常有用:
<code class="language-sql">SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_schema = 'schema_name' AND table_name = 'table_name' );</code>
方法 3:使用 regclass
如果表不存在,則將架構限定的表名稱轉換為 regclass
類型會觸發異常。這可以避免雙引號標識符引起的歧義:
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
方法 4:to_regclass()
函數(PostgreSQL 9.4 及更高版本)
對於 PostgreSQL 9.4 及後續版本,to_regclass()
函數提供了更清晰的解決方案。 如果未找到對象,則傳回 NULL
:
<code class="language-sql">SELECT to_regclass('schema_name.table_name');</code>
重要注意事項:
pg_class
或 to_regclass()
是首選,因為它們的範圍更廣泛。 search_path
或 pg_class
時,to_regclass()
設定對結果沒有影響。 以上是如何檢查特定 PostgreSQL 模式中是否存在表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!