PostGreSQL模式schema

问题引入

之前在做数据库设计时,经常会忽略schema模式,直接在数据库下的public模式下建立各类数据表。如果数据表命名不够规范,后期寻找某张表时就会比较麻烦。通过 所幸,PostgreSQL 的模式schema管理,可以对这个问题进行优化。

PGSQL-模式

模式schema

模式(SCHEMA)可以看着是一个表的集合, ++一个模式可以包含视图、索引、数据类型、函数和操作符等++。

其实PG数据库提供的默认数据库模板就是按照模式schema对具备不同功能的数据表进行区分的,
postgres-模板数据库

可以看到:相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 public和 topology都可以包含名为 mytable 的表。虽然模式类似于操作系统层的目录,但是模式不能嵌套。

使用模式schema的优点

使用模式的优势:

  • 允许多个用户使用一个数据库并且不会互相干扰。

  • 将数据库对象组织成逻辑组以便更容易管理。

  • 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。

简单来讲,模式schema为了我们提供了一种按照某种业务规则管理数据表的便捷途径。

如何使用模式?

①创建模式:++create schema schema_name++,

sql 复制代码
create schema myschema;

②在模式下创建数据表tb_user,

sql 复制代码
create TABLE myschema.tb_user(
	user_id INTEGER NOT NULL,
	user_name VARCHAR(64) NOT NULL,
	pass_word VARCHAR(32) NOT NULL,
	create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	remark VARCHAR(128),
	PRIMARY KEY (user_id)
);

接着指定主键user_id自增,需要为其创建自增序列:CREATE SEQUENCE,同样,我们的自增序列位于myschema模式下,

sql 复制代码
# 创建序列
CREATE SEQUENCE myschema.user_sequence START 1;
# 修改tb_user表的主键id为自增序列myschema.user_sequence
ALTER TABLE myschema.tb_user ALTER COLUMN user_id SET DEFAULT nextval('myschema.user_sequence'::regclass)

③在模式下创建视图:view_user,

sql 复制代码
CREATE VIEW myschema.view_tb_user AS
SELECT user_id,user_name,create_time,remark FROM myschema.tb_user

④添加数据,验证ID主键自增以及create_time默认值是否生效,并通过视图查询数据,

sql 复制代码
INSERT INTO myschema.tb_user(user_name,pass_word,remark)
VALUES ('user_1',md5('123456'),'普通用户')

查询视图,

sql 复制代码
SELECT * FROM myschema.view_tb_user

⑤删除模式:

情况1:删除一个模式以及其中包含的所有对象:

复制代码
DROP SCHEMA myschema;

情况2:删除一个模式以及其中包含的所有对象:

复制代码
DROP SCHEMA myschema CASCADE;

如果直接删除myschema会报错,

我们使用级联删除,成功删除,

sql 复制代码
DROP SCHEMA myschema CASCADE
相关推荐
八秒记忆的老男孩1 分钟前
Sentinel5P的L1B级数据预处理(BD7和BD8)【20260427】
数据库·redis·缓存
ChoSeitaku5 分钟前
5.MySQL表的约束|空属性|默认值|列描述|主键|自增长|唯一键|外键
android·数据库·mysql
S1998_1997111609•X9 分钟前
滄集/㞯鎩.赫量被恶意篡改?|\^*仺\~:sall,sql=㶏齾bci.ji.app_sql=-heart{TCP.box}‘雧……㞋
网络·数据库·网络协议·百度·微信
2301_8038756110 分钟前
c++如何通过重定向streambuf流捕获标准错误输出并记录到运行日志【详解】
jvm·数据库·python
2301_7950997424 分钟前
HTML怎么创建时间轴布局_HTML结构化时间线写法【方法】
jvm·数据库·python
运气好好的26 分钟前
CSS组件库如何快速扩展_通过Sass @extend继承基础布局
jvm·数据库·python
m0_6138562935 分钟前
Go install 命令失效原因解析与正确使用指南
jvm·数据库·python
星马梦缘39 分钟前
数据库作战记录6 实验6
数据库·oracle
AC赳赳老秦40 分钟前
DBA 专属方案:用 OpenClaw 实现 SQL 语句优化、慢查询分析、数据库备份巡检全自动化
服务器·前端·数据库·ffmpeg·自动化·deepseek·openclaw
学术阿凡提41 分钟前
Spring Boot 优雅实现异步调用:从入门到自定义线程池与异常处理
java·数据库·算法