【PostgreSQL】系列之 一 schema详解(二)

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁

🦄 个人主页------🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥


目录

[🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁](#🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁)

一、概述

二、创建schema

三、访问schema中的对象

四、schema和授权

五、schema和备份


一、概述


在SQL环境下,schema就是数据库对象的集合,所谓的数据库对象也就是常说的表,索引,视图,存储过程等。在schema之上的,就是数据库的实例,也就是通常create databases获得的东西。也就是说一个schema 实例 可以有多个schema, 可以给不同的用户创建不同的schema,并且他们都是在同一数据库实例下面。

PostgreSQL schema是其独有的一个强大的功能,它可以使一个单独的数据库实例中包含多个独立的、命名空间互相隔离的区域。这个功能让多个应用程序可以在同一个数据库实例中运行,而不会相互干扰。

schema是由一组表、视图、序列、函数、索引等对象组成的,这些对象也被称为schema中的命名空间。


二、创建schema


在postgresql中,需要使用CREATE SCHEMA命令来创建一个新的schema。语法如下:

bash 复制代码
CREATE SCHEMA schema_name;

其中,schema_name为指定的schema名称。如果要在query中使用新创建的schema,必须先将当前查询所在的schema切换至新的schema,通过以下语句实现:

bash 复制代码
SET search_path TO schema_name;

此时查询将默认从新的schema中获取数据。


三、访问schema中的对象


通过schema的隔离机制,可以给应用程序提供'私有'的命名空间。如果schema中有同名的表或其他对象,postgresql会优先选择当前schema中自己的对象。在sql中可以通过以下语法访问特定schema的对象:

bash 复制代码
schema_name.table_name

例如访问一个名为'students'的表:

bash 复制代码
SELECT * FROM ambari_test.users;

我们可以看到 只要切换到对应的 schema ,schema 加与不加 都可以 访问表,

在ambari_test 的 schema 访问public的 stu表 会报错,这个时候我们需要加上 schema ,也就是说 跨 schema 访问 需要显示加上 schema 。


四、schema和授权


在postgresql中,可以使用GRANT和REVOKE命令控制用户对schema中的对象的访问权限。授权用法如下:

cs 复制代码
GRANT privilege ON SCHEMA schema_name TO role_name;

其中,privilege可以是SELECT、INSERT、UPDATE、DELETE、USAGE等权限,role_name是指授权对象。例如,授权用户'admin'可以访问'students'表:

cs 复制代码
# 创建名为 zhang 的用户
create user zhang with password '123456';

# 授予使用权限
grant usage on schema kangll_schema  to zhang;

# 给zhang用户 授予kangll_schema 所有表的查询权限
grant select  on all tables in schema kangll_schema to zhang;

因为配置文件中默认的搜索路径包括公共schema,postgres用户(数据超级用户)对所有schema都有访问权限,授权使用 管理员完成。

USAGE和SELECT区别

USAGE 权限只让角色能够访问 SCHEMA 中的数据类型、操作符、函数等其他数据库对象,但是不包含对 SCHEMA 中的表的访问权。

如果没有为表(例如:api.todos)授权 SELECT 权限,即使已授权 SCHEMA 的 USAGE 权限,角色仍然无法读取该表中的数据。为了允许一个角色执行 SELECT 查询并获取某个表中的数据,你需要为该角色分别授权 SCHEMA 的 USAGE 权限和表的 SELECT 权限。


五、schema和备份


postgresql数据库备份时,可以选择备份指定的schema,或者备份整个数据库。备份指定schema需要用到命令的--schema=schema_name选项。例如备份名称为'my_backup'的'my_schema' schema:

cs 复制代码
pg_dump -h localhost -p 5432 -U postgres -F t -b -v --schema=kangll_schema -f ./my_backup.tar.gz kangll_test

注意,该命令只会备份'kangll_schema' schema中的对象。如下是备份完成后 tar包内容:


PostgreSQL schema详解_笔记大全_设计学院

原文链接:Schema是什么_数据库中的schema是什么意思_Loobeeke的博客-CSDN博客

相关推荐
晋阳十二夜6 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL7 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT8 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
AI、少年郎10 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄10 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear11 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_4383354011 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式
码不停蹄的玄黓11 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_11 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)11 小时前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存