集簇:
一个PostgreSQL数据库集簇中包含一个或更多命名的数据库(类似于实例的概念)。 角色和一些其他对象类型被整个集簇共享,连接到服务器的客户端只能访问单个数据库中的数据,即在URL中指定的那个数据库。
一个集簇的用户并不必拥有访问集簇中每一个数据库(database)的权限。 角色名的共享意味着
不可能在同一个集簇中出现重名的不同角色,即在两个database中也不能出现名称相同的角色。
模式:
一个数据库包含一个或多个命名模式,模式中包含着表。模式还包含其他类型的命名对象,
包括数据类型、函数和操作符等。相同的数据库对象可以存在于不同的schema中不会冲突。
schema和database 的区别:
和数据库不同,模式并不是被严格地 隔离:一个用户可以访问他们所连接的数据库中的所有模式内的对象,只要他们有足够的权限。
创建模式:
create schema myschema;
create schema schema_name authorization user_name;
在一个模式中访问数据库对象:
myschema.mytabname 也可以使用 database.schema.tabname
删除模式:
drop schema myschema;
删除模式和相关数据库对象:
drop schema myschema cascade;
如果创建表的时候没有指定模式名,则默认都放入public模式下。
模式搜索路径:
在实际的应用中,通常使用的是表名,而不会把数据库名、模式名这么冗长的路径都写上。所以需要通过变量search_path来搜索和拼凑表名的全路径。
第一个元素说明一个和当前用户同名的模式会被搜索。如果不存在这个模式,该项将被忽
略。第二个元素指向我们已经见过的公共模式。
修改模式的搜索路径:
SET search_path TO myschema,public;
模式和权限:
默认情况下,用户不能访问不属于他们的方案中的任何对象。要允许这种行为,模式的拥有
者必须在该模式上授予USAGE权限。
一个用户也可以被允许在其他某人的模式中创建对象。要允许这种行为,模式上的CREATE权
限必须被授予。注意在默认情况下,所有人都拥有在public模式上的CREATE和USAGE权限。
这使得用户能够连接到一个给定数据库并在它的public模式中创建对象。回收这一特权的使
用模式调用:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
系统目录模式:
除public和用户创建的模式之外,每一个数据库还包括一个pg_catalog模式,它包含了系统
表和所有内建的数据类型、函数以及操作符。pg_catalog总是搜索路径的一个有效部分。如
果没有在路径中显式地包括该模式,它将在路径中的模式之前被搜索。这保证了内建的名称
总是能被找到。