PostgreSQL中有没有类似Oracle的dba_objects系统视图
在PostgreSQL中,没有一个完全集成了所有对象信息的视图(类似于Oracle中的DBA_OBJECTS
)。但是,PostgreSQL提供了一些系统目录表和视图,可以用来获取数据库对象的信息。这些系统目录表和视图包括但不限于以下内容:
- pg_class: 存储关系(表、索引、序列、视图等)的基本信息。
- pg_tables: 包含所有用户定义的表的信息。
- pg_views: 包含视图的信息。
- pg_indexes: 包含索引的信息。
- information_schema.tables: 标准SQL视图,包括表的信息。
- information_schema.views: 标准SQL视图,包括视图的信息。
- information_schema.columns: 包含所有列的信息。
你可以使用这些视图和表来查询不同类型的数据库对象信息。例如:
查询所有表的信息
SELECT * FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'pg_catalog');
查询所有视图的信息
SELECT * FROM information_schema.views
WHERE table_schema NOT IN ('information_schema', 'pg_catalog');
查询所有索引的信息
SELECT * FROM pg_indexes
WHERE schemaname NOT IN ('pg_catalog', 'information_schema');
查询所有用户定义的表、视图、序列的基本信息
SELECT * FROM pg_class
WHERE relkind IN ('r', 'v', 'S') AND relnamespace NOT IN (SELECT oid FROM pg_namespace WHERE nspname IN ('pg_catalog', 'information_schema')
);
如果你需要一个整合多个对象信息的视图,可以自己创建一个类似DBA_OBJECTS
的视图。例如:
创建自定义视图
CREATE VIEW dba_objects AS
SELECT c.oid,n.nspname AS schema_name,c.relname AS object_name,CASE c.relkindWHEN 'r' THEN 'table'WHEN 'v' THEN 'view'WHEN 'i' THEN 'index'WHEN 'S' THEN 'sequence'WHEN 'c' THEN 'composite type'ELSE 'other'END AS object_type,pg_get_userbyid(c.relowner) AS owner
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema');
通过这种方式,你可以灵活地查询数据库中的各种对象,并根据具体需求进行筛选和整理。