pg_table_is_visible()
是一个系统函数,用于确定关系(表、视图或物化视图)是否在当前模式搜索路径中可见。
pg_table_is_visible()
在 PostgreSQL 7.3 中添加。
用法
pg_table_is_visible (table
oid
) →boolean
table
参数可以作为文本值提供,其中包含 regclass
OID 别名,其中包含关系的名称。在这种情况下,名称应作为模式限定值提供(例如 "someschema.sometable
"),否则如果关系存在但不在当前搜索路径中可见,则会引发 ERROR
。
更改历史记录
- PostgreSQL 7.3
- 添加 (提交 4ab8e690)
示例
以下是如何使用 pg_table_is_visible()
的示例,假设以下关系是在 foo
模式中创建的
postgres=# CREATE TABLE foo.bar (id int); CREATE TABLE postgres=# CREATE VIEW foo.baz AS SELECT * FROM foo.bar; CREATE VIEW postgres=# CREATE MATERIALIZED VIEW foo.bop AS SELECT * FROM foo.bar; SELECT 0
按原样,在当前搜索路径中没有创建的关系可见
postgres=# SHOW search_path; search_path ----------------- "$user", public (1 row) postgres=# SELECT pg_table_is_visible('foo.bar'::regclass); pg_table_is_visible --------------------- f (1 row) postgres=# SELECT pg_table_is_visible('foo.baz'::regclass); pg_table_is_visible --------------------- f (1 row) postgres=# SELECT pg_table_is_visible('foo.bop'::regclass); pg_table_is_visible --------------------- f (1 row)
如果关系不存在,或者存在但未进行模式限定并且不在当前搜索路径中,则会引发 ERROR
postgres=# SELECT pg_table_is_visible('foo'::regclass); ERROR: relation "foo" does not exist LINE 1: SELECT pg_table_is_visible('foo'::regclass); postgres=# SHOW search_path; search_path ----------------- "$user", public (1 row) postgres=# SELECT pg_table_is_visible('bar'::regclass); ERROR: relation "bar" does not exist LINE 1: SELECT pg_table_is_visible('bar'::regclass);
参考文献
- PostgreSQL 文档: 模式可见性查询函数