# 数据库与模式

URL: https://caijiao.org/postgresql/basic/objects/schema
Source: docs/postgresql/basic/objects/schema.md
Description: 理解 PostgreSQL 中数据库与模式（schema）的基本概念、结构以及在多租户和权限管理中的作用。

## 数据库（Database）概述

在 PostgreSQL 中，一个数据库是逻辑上的数据容器，包含一组独立的表、视图、函数等对象。

- 每个数据库是独立命名空间，不能跨库查询（除非使用 FDW）
- 一个 PostgreSQL 实例可包含多个数据库
- 数据库创建语法：

```sql
CREATE DATABASE mydb;
````

## 模式（Schema）的作用

模式（Schema）是数据库内的逻辑结构，用于组织对象，如表、视图、函数等。

* 类似文件系统中的文件夹
* 同一个数据库可以包含多个 schema
* 默认 schema 是 `public`
* 创建 schema 的语法：

```sql
CREATE SCHEMA sales;
```

## 使用 Schema 的好处

* **组织结构清晰**：便于模块化管理（如 finance, hr, sales 等）
* **权限控制**：可基于 schema 设置访问权限
* **多版本支持**：可以存放同名对象（如多个版本的函数）
* **支持多租户**：每个租户一个 schema，实现隔离

## Schema 示例

```sql
-- 创建 schema 并授权给某用户
CREATE SCHEMA hr AUTHORIZATION alice;

-- 在 schema 中创建表
CREATE TABLE hr.employees (
  id SERIAL PRIMARY KEY,
  name TEXT,
  hired_at DATE
);

-- 查询指定 schema 下的表
SELECT * FROM hr.employees;
```

## 设置默认搜索路径

可以通过 `search_path` 设置默认 schema：

```sql
SET search_path TO hr, public;
```

## 小结

PostgreSQL 的 schema 提供了灵活的对象分组方式，使数据库结构更清晰，并增强了安全性和可扩展性。在多用户、多项目环境中尤为重要。
