验证特定 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中文网其他相关文章!