PostgreSQL教程

PostgreSQL Schema

在本节中,我们将学习 PostgreSQL模式(公共模式),PostgreSQL如何使用模式搜索路径来解析Schema中的对象,PostgreSQL模式和特权,以及使用PostgreSQL模式的优势

PostgreSQL模式简介

每个数据库都从一个模式开始,应该是公共架构。并且 schema 是表的命名集合。
PostgreSQL模式
架构是一个命名空间,提供了多个对象,例如
视图 索引 序列 数据类型 操作符 函数 其他关系。 PostgreSQL模式
注意: PostgreSQL Schema是一个包含命名对象的名称空间。
在 PostgreSQL模式中,我们可以将模式名称固定为使用以下语句访问模式对象的前缀:
schema_name.object_name
否则,我们可以设置一个包含架构的搜索路径,并且将来我们也可以覆盖该架构的搜索路径。
数据库可以具有一个或一个模式更多,而每个模式仅用于一个数据库,并且两个模式可以包含不同的对象,它们共享相似的名称。
例如
假设我们有公司架构,其中包含 Employee表,公共架构也具有 Employee表。当我们引用Employee表时,应如下所示:
public.comany
Or
Employee.company

为什么我们需要在PostgreSQL中使用模式?

在 PostgreSQL中,出于以下主要原因,我们正在使用架构:
最终用户只能使用那些允许将测试表和逻辑与生产表分离的架构。 在模式中,我们可以有效地获取数据,并将其应用于以下一些活动: 我们可以快速恢复存在于不同模式中的数据。因此,可以分别返回和备份面向应用程序的架构,以进行恢复和时间旅行。 当应用程序数据处于模式中时,我们可以管理应用程序更改。因此,新版本的应用程序可以在新架构中的表结构上工作,包括对架构名称的简单修改。 我们可以轻松地备份单独模式中存在的数据。因此,不稳定的数据可以具有来自非易失性数据的多个备份计划。
因此,出于创建目的,我们可以在架构高级管理中将我们的应用程序数据分开。并且出于最终用户的目的,我们可以通过互相帮助使用户保持在不同的架构中。

公共架构

在PostgreSQL教程的较早主题中,我们创建表时未描述任何模式名称。默认情况下,这些表和其他对象会自动放入公共模式
对于每个新数据库,PostgreSQL都会生成一个称为 public的模式。 ,以下命令是并行的:
CREATE TABLE table_name;
And
CREATE TABLE public.table_name;

PostgreSQL 模式搜索路径

在PostgreSQL中,如果仅按表名选择表,则可以在模式搜索路径的帮助下搜索表。 PostgreSQL将为模式搜索路径中的初始等效表提供特权。如果没有匹配项,它将抛出错误,甚至是名称出现在数据库的替代模式中。 在PostgreSQL中,当前模式被称为搜索路径中的主要模式。 我们经常可以在 schema搜索路径中引用没有模式名称的表。
例如
要访问Employee表,我们使用 company.Employee
注意:
如果我们在不描述模式名称的情况下创建新对象, PostgreSQL也将对新对象使用当前模式 current_schema()方法用于返回当前架构。
SELECT current_schema();
输出
执行上述命令后,我们将获得以下输出:
PostgreSQL模式
注意: PostgreSQL对我们在数据库中创建的每个新对象都使用public。
我们可以使用下面的SHOW语句查看当前搜索路径。
SHOW search_path;
输出
执行上述命令后,我们将获得以下输出:
PostgreSQL Schema
在上面的输出中:
" $ user" 定义PostgreSQL将用于查找名称与当前用户名称相似的对象的第一个模式。
例如
如果我们使用Postgres用户登录并具有 Employee 表的特权。在 Postgres模式中,PostgreSQL将搜索 Employee 表。如果找不到类似的对象,它将继续在 public 模式中搜索对象。
第二个组件是指定给公共模式,正如我们之前所了解的。
要创建新架构,我们可以使用 创建SCHEMA 命令:
CREATE SCHEMA Company;
输出
PostgreSQL模式
并用于添加新模式到搜索路径,我们可以使用以下语句:
SET search_path TO Company, public;
输出
PostgreSQL模式
如果创建新表 Employee 而不描述架构名称,那么PostgreSQL会将这个 Employee表放入 Company架构:
CREATE TABLE Employee(
Emp_id SERIAL PRIMARY KEY,
first_name VARCHAR(30) NOT null,
last_name VARCHAR(30) NOT null,
Age integer NOT null,
email VARCHAR(100) NOT null UNIQUE,
address CHARACTER(50), 
salary REAL
);
输出
PostgreSQL模式
下面的屏幕快照显示了新的架构 Company Employee 表,该表属于 Company架构:
PostgreSQL模式
要访问公司模式中的 Employee表,我们可以使用以下命令之一:
SELECT * FROM Employee;
Or 
SELECT * FROM Company.Employee;
公共模式是搜索路径中的第二个组件;因此,要访问公共架构中的 Employee表,我们应在下面指定表名:
SELECT * FROM public.Employee;
执行所有上述语句后,我们将获得以下输出。
运行第一个命令后,我们将获得以下输出:
PostgreSQL模式
执行第二条命令后,我们将获得以下输出:
PostgreSQL模式
一旦执行 last命令,我们将得到以下输出:
PostgreSQL模式
执行所有这三个命令后,我们将获得相同的输出,这就是为什么我们可以使用上述任何查询来访问"公司"架构中的员工表
注意: 我们也可以删除公共模式,因为它不是唯一的模式。

PostgreSQL模式和特权

用户只能拥有访问他们创建的模式中的对象的特权,这意味着用户不能使用架构中未创建的任何其他对象。
因此,我们必须授予使用特权,以便用户获得对对象中所有对象的访问权限
以下命令用于为该模式下的用户获取使用权限:
GRANT USAGE ON SCHEMA schema_name TO user_name;
要允许用户在他们未创建的架构中创建对象,我们必须授予他们 CREATE特权
以下命令用于授予对架构的创建特权:
GRANT CREATE ON SCHEMA schema_name TO user_name;
注意: 默认情况下,每个用户在公共架构上都具有USAGE和CREATE特权。
如果我们不想在以下命令的帮助下访问该特权,则可以撤消该特权。
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
在这里,第一个 public 指的是架构,,第二个 public 指的是每个用户

PostgreSQL模式操作

我们可以使用 CREATE SCHEMA 命令创建新的架构。 我们可以使用 DROP SCHEMA 命令删除架构。 我们可以使用 ALTER SCHEMA 命令重命名架构或修改所有者。

使用PostgreSQL架构的好处

该架构使我们能够简化许多使用一个数据库而无需彼此参与的用户。 PostgreSQL模式的一些普遍优势如下:
在PostgreSQL架构中,关键优势在于,如果数据库属于不同的架构,则它可以具有相同的表名。 这些模式可以将数据库对象归类为逻辑组,以使其更具可控性。 该架构允许用户使用一个数据库来替代多个数据库。 为避免与其他对象的名称冲突,我们可以将第三方架构放入不同的架构中。 名称相似的对象只要放在不同的架构中就不会发生冲突。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4