创建和管理SCHEMA
创建和管理SCHEMA¶
Schema从逻辑上组织一个数据库中的对象和数据。 Schema允许用户在同一个数据库中拥有多于一个对象(例如表)具有相同的名称而不发生冲突,只要把它们放在不同的Schema中就好。
默认Public
SCHEMA¶
每个数据库都有一个名为public的schema。 如果用户没有创建任何schema,对象会被创建在这个public的schema中。
所有的数据库角色(用户)都在public schema中拥有CREATE
和USAGE
特权。
在用户创建一个schema时,用户应该为允许访问该schema的用户授予特权。
创建SCHEMA¶
可以使用CREATE SCHEMA
命令来创建一个新的schema。例如:
=> CREATE SCHEMA myschema;
要在一个schema中创建或者访问对象,需要写一个由schema名和表名构成的限定名,两者之间用点号隔开。例如:
myschema.table
有关访问一个schema的信息请见SCHEMA搜索路径。
用户可以创建一个由他人拥有的schema,例如用来把用户的活动限定在定义良好的名字空间内。语法是:
=> CREATE SCHEMA schemaname AUTHORIZATION username;
SCHEMA搜索路径¶
要在数据库中指定一个对象的位置,请使用schema限定的名称。例如:
=> SELECT * FROM myschema.mytable;
用户可以设置search_path
配置参数来指定在其中搜索对象的可用schema的顺序。
在该搜索路径中第一个列出的方案会成为默认schema。
如果没有指定方案,对象会被创建在默认schema中。
设置SCHEMA搜索路径
search_path
配置参数设置schema搜索顺序。 ALTER DATABASE
命令可以设置搜索路径。例如:
=> ALTER DATABASE mydatabase SET search_path TO myschema,
public, pg_catalog;
用户也可以使用ALTER ROLE
命令为特定的角色(用户)设置search_path
。例如:
=> ALTER ROLE sally SET search_path TO myschema, public,
pg_catalog;
查看当前SCHEMA¶
使用current_schema()
函数可以查看当前的schema。例如:
=> SELECT current_schema();
使用SHOW
命令可以查看当前的搜索路径。例如:
=> SHOW search_path;
删除SCHEMA¶
使用DROP SCHEMA
命令可以删除一个schema。例如:
=> DROP SCHEMA myschema;
默认情况下,在能够删除一个schema前,它必须为空。 要删除一个schema连同其中的所有对象(表、数据、函数等等),可以使用:
=> DROP SCHEMA myschema CASCADE;
系统SCHEMA¶
下列系统级schema存在于每一个数据库中:
-
pg_catalog
包含着系统目录表、内建数据类型、函数和操作符。即便在schema搜索路径中没有显式地提到它,它也总是schema搜索路径的一部分。 -
information_schema
有一个包含数据库中对象信息的视图集合组成。这些视图以一种标准化的方式从系统目录表中得到系统信息。 -
pg_toast
存储大型对象,如超过页面尺寸的记录。这个schema由SeaboxMPP数据库系统内部使用。 -
pg_bitmapindex
存储位图索引对象,例如值的列表。这个schema由SeaboxMPP数据库系统内部使用。 -
pg_aoseg
存储列存表对象。这个schema由SeaboxMPP数据库系统内部使用。 -
sc_toolkit
是一个管理用途的schema,它包含用户可以用SQL命令访问的外部表、视图和函数。所有的数据库用户都能访问sc_toolkit
来查看和查询系统日志文件以及其他系统指标。