创建和管理方案

方案从逻辑上组织一个数据库中的对象和数据。方案允许用户在同一个数据库中拥有多于一个对象(例如表)具有相同的名称而不发生冲突,只要把它们放在不同的方案中就好。

上级主题: 定义数据库对象

默认的“Public”方案

每个数据库都一个名为public的默认方案。如果用户没有创建任何方案,对象会被创建在这个public方案中。所有的数据库角色(用户)都在public方案中拥有 CREATE和USAGE特权。在用户创建一个方案时,用户应该为允许访问该方案的用户授予特权。

创建一个方案

可以使用CREATE SCHEMA命令来创建一个新的方案。例如:

  1. => CREATE SCHEMA myschema;

要在一个方案中创建或者访问对象,需要写一个由方案名和表名构成的限定名,两者之间用点号隔开。例如:

  1. myschema.table

有关访问一个方案的信息请见方案搜索路径

用户可以创建一个由他人拥有的方案,例如用来把用户的活动限定在定义良好的名字空间内。语法是:

  1. => CREATE SCHEMA schemaname AUTHORIZATION username;

方案搜索路径

要在数据库中指定一个对象的位置,请使用方案限定的名称。例如:

  1. => SELECT * FROM myschema.mytable;

用户可以设置search_path配置参数来指定在其中搜索对象的可用方案的顺序。在该搜索路径中第一个列出的方案会成为所谓的默认方案。如果没有指定方案,对象会被创建在默认方案中。

设置方案搜索路径

search_path配置参数设置方案搜索顺序。ALTER DATABASE命令可以设置搜索路径。例如:

  1. => ALTER DATABASE mydatabase SET search_path TO myschema,
  2. public, pg_catalog;

用户也可以使用ALTER ROLE命令为特定的角色(用户)设置search_path。例如:

  1. => ALTER ROLE sally SET search_path TO myschema, public,
  2. pg_catalog;

查看当前方案

使用current_schema()函数可以查看当前的方案。例如:

  1. => SELECT current_schema();

使用SHOW命令可以查看当前的搜索路径。例如:

  1. => SHOW search_path;

删除一个方案

使用DROP SCHEMA命令可以删除一个方案。例如:

  1. => DROP SCHEMA myschema;

默认情况下,在能够删除一个方案前,它必须为空。要删除一个方案连同其中的所有对象(表、数据、函数等等),可以使用:

  1. => DROP SCHEMA myschema CASCADE;

系统方案

下列系统级方案存在于每一个数据库中:

  • pg_catalog包含着系统目录表、内建数据类型、函数和操作符。即便在方案搜索路径中没有显式地提到它,它也总是方案搜索路径的一部分。
  • information_schema有一个包含数据库中对象信息的视图集合组成。这些视图以一种标准化的方式从系统目录表中得到系统信息。
  • pg_toast存储大型对象,如超过页面尺寸的记录。这个方案由Greenplum数据库系统内部使用。
  • pg_bitmapindex存储位图索引对象,例如值的列表。这个方案由Greenplum数据库系统内部使用。
  • pg_aoseg存储追加优化表对象。这个方案由Greenplum数据库系统内部使用。
  • gp_toolkit是一个管理用途的方案,它包含用户可以用SQL命令访问的外部表、视图和函数。所有的数据库用户都能访问gp_toolkit来查看和查询系统日志文件以及其他系统指标。