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 | 具体的数据对象 | 表、视图、索引、函数 |