pg_table_is_visible() 是一个系统函数,用于确定关系(表、视图或物化视图)在当前模式搜索路径中是否可见。
pg_table_is_visible() 添加于 PostgreSQL 7.3。
用法
pg_table_is_visible (tableoid) →boolean
可以使用包含关系名称的 regclass OID 别名 以文本值的形式提供 table 参数。在这种情况下,应以模式限定的值(例如“someschema.sometable”)提供名称,否则如果关系存在但不在当前搜索路径中可见,则会引发 ERROR。
变更历史
- PostgreSQL 7.3
- 添加于 (提交 4ab8e690)
示例
假设在 foo 模式下创建了以下关系,pg_table_is_visible() 的示例用法如下:
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 文档: Schema Visibility Inquiry Functions
