创建和管理SCHEMA

    Parent topic: 定义数据库对象

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

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

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

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

    1. => CREATE SCHEMA schemaname AUTHORIZATION username;

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

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

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

    1. public, pg_catalog;
    1. pg_catalog;

    查看当前SCHEMA

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

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

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

      1. => DROP SCHEMA myschema;

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

      • pg_catalog包含着系统目录表、内建数据类型、函数和操作符。 即便在schema搜索路径中没有显式地提到它,它也总是schema搜索路径的一部分。
      • information_schema有一个包含数据库中对象信息的视图集合组成。 这些视图以一种标准化的方式从系统目录表中得到系统信息。
      • pg_toast存储大型对象,如超过页面尺寸的记录。 这个schema由Greenplum数据库系统内部使用。
      • pg_bitmapindex存储位图索引对象,例如值的列表。 这个schema由Greenplum数据库系统内部使用。
      • pg_aoseg存储追加优化表对象。 这个schema由Greenplum数据库系统内部使用。