ALTER SCHEMA

通过以下方式之一更改一个或多个架构:

  • 通过在架构中创建的表启用或禁用架构权限的继承。

  • 将架构所有权重新分配给另一个用户。

  • 更改架构磁盘配额。

  • 重命名一个或多个架构。

语法

ALTER SCHEMA [database.]schema
    DEFAULT {INCLUDE | EXCLUDE} SCHEMA PRIVILEGES
    | OWNER TO user-name [CASCADE]
    | DISK_QUOTA { value | SET NULL }

您可以在单个操作中重命名多个架构:

ALTER SCHEMA [database.]schema[,...] RENAME TO new-schema-name[,...]

参数

数据库
包含架构的数据库的名称。如果指定,则必须是当前数据库。
架构
要修改的架构的名称。
DEFAULT {INCLUDE | EXCLUDE} SCHEMA PRIVILEGES

指定是否启用或禁用指定架构中新表的默认权限继承:

  • EXCLUDE SCHEMA PRIVILEGES (默认值):禁用架构的权限继承。

  • INCLUDE SCHEMA PRIVILEGES:指定为指定架构中的表授予的权限与为架构授予的权限相同。此选项对架构中的现有表没有影响。

另请参阅 启用架构继承

OWNER TO
将架构所有权重新分配给指定用户:
OWNER TO user-name [CASCADE]

默认情况下,重新分配的架构中对象的所有权保持不变。要将架构对象的所有权重新分配给新架构所有者,请使用 CASCADEOWNER TO 子句进行限定。有关详细信息,请参阅下面的级联架构所有权

DISK_QUOTA
以下几项之一:
  • 一个字符串,整数后跟支持的单位:K、M、G 或 T。如果新值小于当前使用量,操作将成功,但在使用量降至新配额以下之前,将无法使用更多磁盘空间。

  • SET NULL,用于移除配额。

有关详细信息,请参阅磁盘配额

RENAME TO
重命名一个或多个架构:
RENAME TO new-schema-name[,...]

需要满足以下要求:

  • 新架构名称符合标识符中描述的约定。此外,该名称在数据库中所有序列、表、投影、视图、模型和架构的名称中必须是唯一的。

  • 如果指定多个要重命名的架构,则源列表和目标列表必须具有相同数量的名称。

特权

以下几项之一:

  • 超级用户

  • 架构所有者

级联架构所有权

默认情况下,ALTER SCHEMA...OWNER TO 不会影响目标架构中对象的所有权或授予给这些对象的权限。如果使用 CASCADEOWNER TO 子句进行限定,Vertica 将对目标架构中的对象执行以下操作:

  • 将先前架构所有者所拥有的对象所有权转移给新的所有者。

  • 撤销上一个架构所有者授予的所有对象权限。

如果由非超级用户发出,ALTER SCHEMA...OWNER TO CASCADE 会忽略属于其他用户的所有对象,并就其无法更改的对象返回通知。例如:

  1. 架构 ms 归用户 mayday 所有,其包含两个表: ms.t1 归 mayday 所有,ms.t2 归用户joe 所有:

    => \dt
                               List of tables
         Schema     |         Name          | Kind  |  Owner  | Comment
    ----------------+-----------------------+-------+---------+---------
     ms             | t1                    | table | mayday  |
     ms             | t2                    | table | joe     |
    
  2. 用户 mayday 使用 CASCADE 将架构 ms 的所有权转移给用户 dbadmin。返回时,ALTER SCHEMA 报告它无法转移归用户 joe 所有的表 ms.t2 及其投影的所有权:

    
    => \c - mayday
    You are now connected as user "mayday".
    => ALTER SCHEMA ms OWNER TO dbadmin CASCADE;
    NOTICE 3583:  Insufficient privileges on ms.t2
    NOTICE 3583:  Insufficient privileges on ms.t2_b0
    NOTICE 3583:  Insufficient privileges on ms.t2_b1
    ALTER SCHEMA
    => \c
    You are now connected as user "dbadmin".
    => \dt
                               List of tables
         Schema     |         Name          | Kind  |  Owner  | Comment
    ----------------+-----------------------+-------+---------+---------
     ms             | t1                    | table | dbadmin |
     ms             | t2                    | table | joe     |
    
  3. 用户 dbadmin 再次使用 CASCADE 将架构 ms 的所有权转移给用户 pat。这次,因为 dbadmin 是超级用户,所以 ALTER SCHEMA 可以将所有 ms 表的所有权转移给用户 pat

    => ALTER SCHEMA ms OWNER TO pat CASCADE;
    ALTER SCHEMA
    => \dt
                               List of tables
         Schema     |         Name          | Kind  |  Owner  | Comment
    ----------------+-----------------------+-------+---------+---------
     ms             | t1                    | table | pat     |
     ms             | t2                    | table | pat     |
    

交换架构

重命名架构可用于交换架构而无需实际移动数据。为便于交换,请输入一个不存在的、临时占位符架构。例如,以下 ALTER SCHEMA 语句使用临时架构 temps 来帮助架构 S1 与架构 S2 进行交换。在此示例中,S1 被重命名为 temps。然后 S2 被重命名为 S1。最后,temps 被重命名为 S2

=> ALTER SCHEMA S1, S2, temps RENAME TO temps, S1, S2;

示例

以下示例将架构 S1S2 分别重命名为 S3S4

=> ALTER SCHEMA S1, S2 RENAME TO S3, S4;

此示例将新表 t2 的默认行为设置为自动继承架构的权限:

=> ALTER SCHEMA s1 DEFAULT INCLUDE SCHEMA PRIVILEGES;

=> CREATE TABLE s1.t2 (i, int);

此示例将新表的默认行为设置为不自动继承架构的权限:

=> ALTER SCHEMA s1 DEFAULT EXCLUDE SCHEMA PRIVILEGES;

另请参阅