🧠PostgreSQL 邏輯結構
postgresql邏輯結構
一、總體認識
PostgreSQL 是一個典型的 對象-關系型數據庫管理系統(ORDBMS)。
它的邏輯結構(Logical Structure) 指的是數據庫中對象的組織層級與關系。
邏輯結構決定了數據在數據庫層面的組織方式,與物理結構(數據文件、表空間) 相對。
?? PostgreSQL 的邏輯結構層級關系如下:
Cluster → Database → Schema → Object(Tables, Views, Indexes, etc.)
二、邏輯結構層級總覽
| 層級 | 中文名稱 | 說明 |
|---|---|---|
| Cluster | 數據庫集群 | PostgreSQL 服務器中所有數據庫的集合 |
| Database | 數據庫 | 一個邏輯的數據庫單元 |
| Schema | 模式(命名空間) | 用于分類、隔離數據庫對象 |
| Object | 數據庫對象 | 表、視圖、索引、函數、序列等 |
三、Cluster(數據庫集群)
1. 概念
在 PostgreSQL 中,一個 數據庫集群(Database Cluster) 是指:
- 由同一 PostgreSQL 實例(postgres 進程組)管理的 一組數據庫。
換句話說,一個數據庫服務器運行的實例,就是一個數據庫集群。
每個集群包含:
-
全局系統數據庫(如
template0,template1,postgres) -
若干用戶創建的數據庫
-
共享的系統表(如
pg_authid,pg_database)
2. 特點
-
一個集群由
initdb初始化; -
集群中所有數據庫共享同一組用戶與權限;
-
每個集群有獨立的數據目錄(
$PGDATA)。
3. 相關命令
初始化集群:
initdb -D /var/lib/postgresql/data
查看集群中的數據庫:
\l -- 或 \list
四、Database(數據庫)
1. 概念
數據庫(Database)是集群中的邏輯單元,
用于存放表、視圖、索引、函數等對象。
每個用戶數據庫都有獨立的系統目錄(pg_catalog)。
2. 系統默認數據庫
| 數據庫名 | 說明 |
|---|---|
template0 |
模板數據庫,初始化時生成,不能修改 |
template1 |
新建數據庫的默認模板,可修改 |
postgres |
默認交互數據庫,供管理使用 |
3. 創建與刪除數據庫
CREATE DATABASE salesdb TEMPLATE template1 OWNER sales_admin;
DROP DATABASE salesdb;
連接數據庫:
psql -d salesdb
五、Schema(模式 / 命名空間)
1. 概念
Schema(模式) 是數據庫內部的邏輯分組機制,
用于組織、隔離數據庫對象,防止命名沖突。
類似于操作系統中的“文件夾”,
在同一數據庫內可以有多個 Schema,每個 Schema 下有各自的對象。
2. 默認模式
每個數據庫都有一個默認模式:
public
所有未顯式指定模式的對象,默認創建在 public 模式中。
3. 創建與使用 Schema
CREATE SCHEMA sales AUTHORIZATION sales_admin;
CREATE TABLE sales.orders (
order_id SERIAL PRIMARY KEY,
customer TEXT,
amount NUMERIC
);
SET search_path TO sales; -- 設置默認搜索路徑
訪問指定模式下對象:
SELECT * FROM sales.orders;
4. 模式搜索路徑(Search Path)
PostgreSQL 查找對象的順序由 search_path 決定:
SHOW search_path;
-- 默認值: "$user", public
修改搜索路徑:
SET search_path TO sales, public;
六、Database Objects(數據庫對象)
在 Schema 中存放各種 數據庫對象(Objects),常見類型如下:
| 對象類型 | 說明 |
|---|---|
| Table(表) | 存儲數據的基本結構 |
| View(視圖) | 基于 SQL 查詢的虛擬表 |
| Materialized View(物化視圖) | 帶有實際數據的緩存視圖 |
| Index(索引) | 加速查詢的結構 |
| Sequence(序列) | 生成自增數字 |
| Function(函數) | 自定義邏輯與計算 |
| Trigger(觸發器) | 事件驅動邏輯 |
| Type(類型) | 用戶自定義數據類型 |
| Domain(域) | 帶約束的類型 |
| Role(角色) | 用戶或用戶組 |
| Extension(擴展) | 模塊化功能組件(如 postgis) |
示例:創建常見對象
CREATE TABLE sales.customers (
id SERIAL PRIMARY KEY,
name TEXT,
email TEXT
);
CREATE VIEW sales.active_customers AS
SELECT * FROM sales.customers WHERE email IS NOT NULL;
CREATE INDEX idx_email ON sales.customers (email);
七、Schema 與權限控制
Schema 是實現數據庫安全隔離的關鍵機制。
常見權限管理語法:
-- 授予用戶訪問某模式
GRANT USAGE ON SCHEMA sales TO analyst;
-- 授予查詢權限
GRANT SELECT ON ALL TABLES IN SCHEMA sales TO analyst;
-- 撤銷權限
REVOKE ALL ON SCHEMA sales FROM analyst;
八、邏輯結構示意圖
PostgreSQL Cluster
│
├── Database: postgres
│ ├── Schema: public
│ │ ├── Table: users
│ │ ├── View: active_users
│ │ └── Function: user_login_count()
│
├── Database: salesdb
│ ├── Schema: sales
│ │ ├── Table: orders
│ │ ├── Table: customers
│ │ └── View: monthly_sales
│ └── Schema: analytics
│ ├── Materialized View: sales_summary
│ └── Function: calc_growth_rate()
│
└── Database: template1
九、Cluster 與 Instance 的區別
| 名稱 | 層級 | 說明 |
|---|---|---|
| Instance(實例) | 運行層 | 一組后臺進程 + 內存結構(由 postgres 啟動) |
| Cluster(集群) | 邏輯層 | 一個實例管理的所有數據庫集合 |
?? PostgreSQL 中的 “集群” 是邏輯概念,不是多節點分布式集群。
十、總結回顧
| 層級 | 作用 | 舉例 |
|---|---|---|
| Cluster | 管理一組數據庫的整體結構 | 一個 PostgreSQL 實例 |
| Database | 存放業務數據的邏輯單元 | salesdb, hrdb |
| Schema | 命名空間,防止命名沖突 | public, sales |
| Object | 具體的數據對象 | 表、視圖、索引、函數 |


浙公網安備 33010602011771號