Postgres : 创建schema、创建表空间与指定用户权限

news2024/11/17 17:23:09

1. 创建新的Schema

要创建 PostgreSQL 中的一个新的 schema,并创建一个只有该 schema 权限的新用户,请按照以下步骤操作:

(1)打开 PostgreSQL 客户端并连接到数据库服务器。

(2)创建一个新的 schema,使用 CREATE SCHEMA 命令,后面紧跟着 schema 的名称。例如,要创建名为 my_schema 的 schema,请运行以下命令:

CREATE SCHEMA my_schema;

(3)创建一个新的用户,使用 CREATE USER 命令。例如,要创建名为 my_user 的用户,请运行以下命令:

CREATE USER my_user WITH PASSWORD 'password';

注意,上面的密码应该被替换为你希望设置的密码。

(4)授予该用户对新 schema 的权限,使用 GRANT 命令。例如,要授予名为 my_user 的用户对名为 my_schema 的 schema 的所有权限,请运行以下命令:

GRANT ALL ON SCHEMA my_schema TO my_user;

上面的命令将授予该用户在 my_schema 中创建、修改和删除表、视图和其他对象的权限。

(5)你可以通过运行以下命令来检查是否已成功创建 schema 和用户:

\dn
\du

(6)切换到新创建的用户,使用 \c 命令连接到数据库,并尝试在该用户的 schema 中创建一个新的表:

\c my_database my_user
CREATE TABLE my_schema.my_table (id SERIAL PRIMARY KEY, name TEXT);

这将在 my_user 用户的 my_schema schema 中创建一个名为 my_table 的新表。

(7)现在,你可以使用 SELECT 命令查询该表并验证该用户只能在自己的 schema 中访问它:

SELECT * FROM my_schema.my_table;

如果你尝试在其他 schema 中查询该表,你将会收到一个错误。

SELECT * FROM public.my_table;
ERROR:  relation "public.my_table" does not exist
LINE 1: SELECT * FROM public.my_table;
                        ^

这是因为该用户没有权限在 public schema 中访问该表。

请注意,如果你希望授予该用户在其他 schema 中的访问权限,请单独为该用户授权。例如,要授予该用户对 public schema 中的表的访问权限,请使用以下命令:

GRANT USAGE ON SCHEMA public TO my_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_user;

上述命令将授予该用户在 public schema 中的所有表上执行 SELECT 操作的权限。请注意,这不会授予该用户对其他 schema 中的表的访问权限。

2. 查询schema是否存在

要查询 PostgreSQL 数据库中是否存在某个特定的 schema,可以使用以下 SQL 命令:

SELECT EXISTS (
   SELECT 1
   FROM information_schema.schemata
   WHERE schema_name = 'your_schema_name'
);

上面的命令中,your_schema_name 是要查询的 schema 的名称。如果该 schema 存在,则查询将返回 true,否则将返回 false

如果要列出所有现有的 schema,可以使用以下命令:

SELECT schema_name
FROM information_schema.schemata;

这将返回数据库中所有 schema 的名称列表。注意,这将包括系统 schema 和用户自定义的 schema。

另外,你也可以使用 PostgreSQL 客户端提供的 \dn 命令来列出数据库中所有的 schema。在 PostgreSQL 命令行中,输入 \dn 并按下回车键即可。

3. 需求与方案

需求:我们会开发一个订单功能,所以需要在分配schema的时候,规定schema的容量大小,来限制用户的使用,这时候就要考虑怎么去实现了?

实现方案:

PostgreSQL 不支持为 schema 直接设置容量大小限制。但是,你可以通过以下两种方法间接实现此目的:

  1. 使用磁盘配额(disk quota)或文件系统配额(filesystem quota):你可以使用操作系统级别的磁盘配额或文件系统配额功能来限制 PostgreSQL 数据目录的大小。这将影响所有数据库、schema 和表。请注意,这种方法可能需要你系统管理员的特殊权限,并且可能会影响系统性能。

  2. 使用表空间(tablespace):在 PostgreSQL 中,表空间是一种逻辑容器,用于存储特定数据库或 schema 中的表及其相关对象。你可以在创建 schema 时指定表空间,从而将 schema 中的表分配给特定的表空间。然后,你可以为每个表空间设置磁盘配额或文件系统配额,以限制该表空间中存储的表和数据的总大小。这种方法的优点是可以对不同的 schema 或表空间设置不同的限制,从而更灵活地控制数据使用情况。

4. 容量查询

4.1 查询所有schema

SELECT 
  nspname AS schema_name, 
  pg_size_pretty(sum(pg_total_relation_size(pg_class.oid))) AS total_size
FROM 
  pg_class 
  JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE 
  nspname NOT LIKE 'pg_%' AND nspname != 'information_schema'
GROUP BY 
  nspname;

该命令将返回所有用户 schema 的名称及其占用的总空间大小,包括数据、索引等。其中,pg_class 表包含了关于数据库中所有表和索引的信息,pg_namespace 表包含了关于 schema 的信息。pg_total_relation_size 函数将计算表和索引的总大小,并以字节为单位返回该值,然后使用 sum 函数将其累加,最后使用 pg_size_pretty 函数将其转换为人类可读的格式。

 请注意,在这个示例中,我们使用 WHERE 子句排除了系统 schema 和 information_schema schema,这些 schema 包含了 PostgreSQL 系统和元数据信息。

4.2 查询指定schema

SELECT 
  nspname AS schema_name, 
  pg_size_pretty(sum(pg_total_relation_size(pg_class.oid))) AS total_size
FROM 
  pg_class 
  JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE 
  nspname = 'your_schema_name'
GROUP BY 
  nspname;

在这个示例中,我们使用 WHERE 子句指定了条件 nspname = 'your_schema_name',以筛选出特定 schema 的信息。请将 your_schema_name 替换为您要查询的 schema 名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Oracle存储过程发生异常时获取out类型参数的值

Oracle存储过程关于在出现(自定义/自带)异常下out类型参数的获取问题的分析 ✈️ 场景: 有一些关于金额和时间的精确且量大的计算需要在存储过程中完成。存储过程中有一些自定义的异常。并且将在RAISE前通过out类型的参数将详细的异常原因返回。 但是在…

商业智能BI分析报表很慢是什么原因?应该如何优化?

当下,数据计算已成为了分析工作中必不可少的高频次操作之一,而且在大数据的发展背景下,应用性能往往关系着项目的成败,成为了大家最为关注的产品技术参数。那么我们先来分析一下BI分析表计算很慢的原因是什么,再对症下…

Microsoft Dynamics 365 Business Central 生产订单扣料的几种方法

学习目标: 掌握生产订单扣料的几种方法 学习内容: Forward flush by routing operation(通过工序:向前扣料)Backward flush by routing operation(通过工序:向后扣料)Forward flus…

Java-Redis持久化之RDB操作

Java-Redis持久化之RDB操作 1.为什么redis需要持久化?2.什么是RDB操作?3.请你用自己的话讲下RDB的过程?4.如何恢复rdb文件? 1.为什么redis需要持久化? Redis是内存数据库,如果不将内存数据库保存到磁盘,那么服务器进程退出&am…

匿名对象的特性和使用场景你知道吗?

目录 一、匿名对象的概念 二、单参数和多参数构造场景的匿名对象 ①只有一个参数的构造函数 ②多个参数的构造函数 三、使用匿名对象作为函数的参数的缺省值 四、只为调用类中的一个函数时 五、匿名对象的特性 1、匿名对象的生命周期只有一行 2、匿名对象具有常性 3、当匿…

今天去面一个点工,HR要我会数据库,Linux还有Python,这合理吗?

软件测试出路在哪? 业务编程!! 1、软件测试的变化趋势 变化趋势1: 功能测试是核心,但是价值降低 目前测试这个行业,还是有大量的点工。但是行业的进步,技术的创新,导致了企业的需求…

不用下载的网页版Axure在这里

作为一名产品经理,你一定需要一款能够帮助你更好更快地制作原型,更方便地和团队协作的软件。网页版Axure工具替代即时设计无需下载激活,就可免费使用。那么,Axure网页版工具替代即时设计是如何进行的呢? 首先&#xf…

【数据结构】双向带头循环链表

文章目录 一、什么是带头双向循环链表二、带头双向循环链表的实现(一)链表中结构体的声明(二)头节点的创建(链表的初始化)(三)新节点的创建(四)链表的尾插&am…

( 位运算 ) 231. 2 的幂 ——【Leetcode每日一题】

❓231. 2 的幂 难度:简单 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2 x n 2^x n2x ,则认为 n 是 2 的幂次方。 示例 1&…

软考高级架构师笔记1-计算机硬件

目录 1. 前言 & 更新2. CPU组成3. CPU的指令集:4.存储器5. 总线1. 前言 & 更新 注意:绪论不考,直接略过。 计算机硬件章节19-21年没考过,在22年真题考过磁盘调度,根据趋势分析,以后考的概率也不大,了解即可。 本节删掉了第一版中的编码、海明码等内容。 2. CP…

一篇文章搞定《Android异常处理》

------《Android异常处理》 异常种类(简述)编译时异常运行时异常 运行时的异常和崩溃受检时的异常第一种做法:第二种做法: 不受检时的异常(崩溃Crash)异常的传播崩溃的兜底Looper 循环问题主流程抛出异常问题 安全气囊的实现方案设…

计算机组成原理---第六章总线系统 习题详解版

(一)课内习题 (二)课后习题 1.比较单总线、多总线结构的性能特点。 答: (1) 单总线结构:它是用单一的系统总线连接整个计算 机系统的各大功能部件,各大部件之间的所有的信息传送都通过这组总线…

【企业信息化】第6集 免费开源ERP: Odoo 16 MRP + 维护+ PLM +质量全面生产制造管理

文章目录 一、MRP 物料需求计划1.一款软件,满足您的所有需要2.工作中心控制面板3.优化您的库存等级4.条形码,即开即用5.出色报告关键绩效指标6.与其他Odoo应用程序完全集成 二、PLM 产品生命周期管理1.管理工程变更2.集成文件管理3.智能版本管理4.与其他…

还在为项目初始化、依赖管理问题困扰?Dubbo Initializer 来了!

作者:Dubbo 社区 通过这篇文章,你将学习如何在 1 分钟内用 Dubbo Initializer 模板快速创建 Dubbo Spring Boot 项目,帮你解决项目初始化问题。 什么是 Dubbo Initializer? Dubbo Initializer 是一款帮助开发者快速生成 Dubbo …

【0基础也能学会】JMeter:如何开始简单的WEB压力测试?

背景 最近工作上被安排针对Web网站进行性能压测,以评估特定的硬件配置下Web网站可支持的并发用户数。考虑到JMeter是流行的Web性能压测工具,因此趁着这次机会上网查阅了很多关于JMeter的资料,也自己动手进行软件的配置和调测,从最…

前瞻洞察|借助机器学习,揪出利用DNS隐蔽隧道作恶黑手

黑客会利用DNS协议进行违法犯罪活动,那DNS协议到底是什么?它有何作用?为什么会被选作进行作恶的手段?会造成什么危害?怎么检测及研究现状如何?一连串疑问接踵而至。本篇文章中,我们会为大家一一…

【Java多线程编程】Thread类

Thread类是什么? Thread 类是 Java 提供的一个标准库,我们可以通过 Thread 类进行多线程编程。因此,今天我给大家讲解的是如何使用 Thread 类进行线程编程。 详细讲解 Thread 类中的:lambda 表达式、start 方法(启动线…

WiFi(Wireless Fidelity)基础(七)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…

Cloud Kernel SIG月度动态:发布ANCK 5.10、4.19新版本,ABS新增仓库构建功能

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 发布 ANCK 5.10-014 版本。 发布 ANCK 4.19-027.2 版本。 ABS 平台新增 OOT 仓库临时构建功…

如何远程控制电脑?3个方法轻松搞定!

案例:如何远程控制电脑? 【我不想时时刻刻都带着自己的电脑,听朋友说可以远程电脑。有没有大神分享一下具体的操作方法?感谢!】 随着科技的不断进步,远程控制电脑已经不再是一件难以实现的事情。如今&…