PostgreSQL中数据库和模式的区别和作用

PostgreSQL 中,数据库(Database)模式(Schema) 是两个层级不同的概念,它们有明显的区别和作用。以下是具体的比较和分析:


1. 定义

  • 数据库(Database):

    • 是 PostgreSQL 中最高级别的数据组织单元。
    • 每个数据库包含一组完全独立的表、视图、索引、模式等对象。
    • 不同的数据库彼此隔离,无法直接跨数据库访问数据。
  • 模式(Schema):

    • 是数据库中的逻辑分组,用于组织数据库内的表、视图、函数等对象。
    • 模式类似于命名空间,不同模式中的对象可以同名,彼此独立。
    • 一个数据库可以包含多个模式。

2. 层级结构

PostgreSQL 的结构是分层的,层级关系如下:

Cluster(集群)
└── Database(数据库)
    └── Schema(模式)
        └── Table(表)
  • 集群(Cluster):
    PostgreSQL 的一个实例可以管理多个数据库,这些数据库共享同一个集群配置。

  • 数据库(Database):
    一个集群中的独立存储单元,包含若干个模式。

  • 模式(Schema):
    数据库内的逻辑分区,用于组织和隔离数据库中的对象。


3. 作用和用途

数据库(Database)

  • 用于隔离不同的应用程序或业务系统。
  • 不同数据库的对象完全隔离,访问需要通过连接不同的数据库。
  • 每个数据库有自己的权限管理、数据文件和元数据。

模式(Schema)

  • 用于在同一数据库中对对象进行逻辑分组。
  • 提供命名空间功能,可以在同一个数据库中有多个同名的表,但位于不同的模式中。
  • 适合用来分离不同的模块、业务逻辑,或者实现多租户架构。

4. 跨级访问

跨数据库访问

PostgreSQL 不支持直接跨数据库访问。要访问其他数据库中的数据,可以使用以下方法:

  • 使用外部数据包装器(Foreign Data Wrapper, FDW),如 postgres_fdw
  • 通过应用程序代码在不同的数据库之间进行数据交互。

跨模式访问

在同一个数据库中,可以直接访问其他模式中的对象,方式为:schema_name.object_name

  • 例如:public.table1,其中 public 是模式,table1 是表。
  • 设置 search_path 后可以省略模式名,默认模式是 public

5. 示例

数据库示例

# 创建两个数据库
CREATE DATABASE db1;
CREATE DATABASE db2;

# 使用数据库
\c db1
\c db2
  • db1db2 是完全独立的数据库,无法直接共享数据。

模式示例

-- 在数据库 db1 中创建两个模式
CREATE SCHEMA schema1;
CREATE SCHEMA schema2;

-- 在 schema1 中创建表
CREATE TABLE schema1.table1 (id SERIAL, name TEXT);

-- 在 schema2 中创建同名表
CREATE TABLE schema2.table1 (id SERIAL, description TEXT);

-- 插入数据到 schema1.table1
INSERT INTO schema1.table1 (name) VALUES ('Alice');

-- 插入数据到 schema2.table1
INSERT INTO schema2.table1 (description) VALUES ('Description');

-- 查询数据
SELECT * FROM schema1.table1;
SELECT * FROM schema2.table1;
  • 这里,schema1.table1schema2.table1 是两个不同的表,虽然它们在同一个数据库中。

6. 对比总结

特性数据库(Database)模式(Schema)
级别集群中的最高级别组织单元数据库中的逻辑分组
隔离性不同数据库之间完全隔离不同模式之间逻辑隔离,但共享数据库资源
命名冲突不同数据库中可以有同名对象不同模式中可以有同名对象
跨级访问不支持直接访问其他数据库,需要使用 FDW支持跨模式访问,通过 schema_name. 指定
使用场景独立的业务系统,或者完全隔离的环境同一业务系统的不同逻辑分组

7. 类比

  • 数据库(Database) 更像是一个独立的仓库,彼此隔离。
  • 模式(Schema) 是仓库内部的分区,用于分类存储物品。

8. 推荐使用场景

  • 数据库(Database):

    • 如果你的应用需要不同的隔离存储,比如不同的业务系统或开发/测试/生产环境,应使用独立的数据库。
  • 模式(Schema):

    • 如果你希望在同一个业务系统或应用中进行逻辑分组,或者实现模块化设计,应使用模式来组织数据对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值