一、模式 (SCHEMA) 概念解析
PostgreSQL 中的模式 (Schema) 是数据库内部的一个命名空间,它包含表、视图、索引、序列、数据类型、函数、操作符等数据库对象。模式可以看作是数据库中的"文件夹",为数据库对象提供逻辑分组。
PostgreSQL 模式是数据库内部的命名空间,用于逻辑分组表、视图等对象。支持多用户隔离、应用隔离及业务模块划分。通过创建、修改、删除模式及配置搜索路径,可实现对象权限控制与命名冲突避免。最佳实践包括规范命名、独立模式部署及撤销 public 模式默认权限,确保数据库安全高效。

PostgreSQL 中的模式 (Schema) 是数据库内部的一个命名空间,它包含表、视图、索引、序列、数据类型、函数、操作符等数据库对象。模式可以看作是数据库中的"文件夹",为数据库对象提供逻辑分组。
当多个用户共享一个数据库时,为每个用户创建独立的模式,避免命名冲突。
第三方应用可以使用独立模式,避免与现有对象名称冲突。
按业务功能划分模式,如 hr_schema、finance_schema 等。
基本语法:
CREATE SCHEMA schema_name [AUTHORIZATION owner_name][schema_element [...]];
示例:
-- 创建简单模式
CREATE SCHEMA myschema;
-- 创建指定所有者的模式
CREATE SCHEMA hr AUTHORIZATION hr_user;
-- 创建模式并包含对象
CREATE SCHEMA marketing CREATE TABLE campaigns (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE VIEW active_campaigns AS
SELECT * FROM campaigns WHERE is_active = true;
标准格式:
CREATE TABLE schema_name.table_name (
column1 datatype [constraints],
column2 datatype [constraints],
...
);
实际示例:
-- 在 myschema 中创建公司表
CREATE TABLE myschema.company(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(25),
SALARY DECIMAL(18,2),
PRIMARY KEY(ID)
);
查看所有模式:
\dn
查看特定模式下的对象:
\dt myschema.*
查询系统目录:
SELECT * FROM information_schema.schemata;
更改模式名称:
ALTER SCHEMA myschema RENAME TO new_schema;
更改模式所有者:
ALTER SCHEMA myschema OWNER TO new_owner;
删除空模式:
DROP SCHEMA myschema;
强制删除模式及其所有对象:
DROP SCHEMA myschema CASCADE;
安全删除(如果存在):
DROP SCHEMA IF EXISTS myschema CASCADE;
PostgreSQL 使用搜索路径确定对象的位置:
-- 查看当前搜索路径
SHOW search_path;
-- 默认值:"$user", public
-- 设置搜索路径
SET search_path TO myschema,public;
搜索路径工作流程:
$user 模式(当前用户名)myschema 模式public 模式hr_data)pg_ 前缀(保留给系统)权限控制:
-- 授权用户使用模式
GRANT USAGE ON SCHEMA myschema TO user1;
-- 授权表操作权限
GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA myschema TO user1;
ALTER DEFAULT PRIVILEGES生产环境应考虑撤销 public 权限:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
错误:relation "table1" does not exist
解决:
-- 明确指定模式
SELECT * FROM myschema.table1;
-- 或设置搜索路径
SET search_path TO myschema;
错误:permission denied for schema myschema
解决:
GRANT USAGE ON SCHEMA myschema TO current_user;
错误:cannot drop schema because other objects depend on it
解决:
DROP SCHEMA myschema CASCADE;
PostgreSQL 的模式机制提供了强大的数据库对象组织能力,通过合理使用模式可以:
掌握模式的创建、管理和使用技巧,是 PostgreSQL 数据库管理的重要基础。在实际应用中,建议结合业务需求设计合理的模式结构,并配合适当的权限控制,构建安全高效的数据库环境。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online