在使用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中文网其他相关文章!