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');
通過這種方式,你可以靈活地查詢數據庫中的各種對象,并根據具體需求進行篩選和整理。