
# ALTER SCHEMA
#### 功能描述
修改模式属性，包括模式名称、所有者、永久表存储空间上限。
#### 注意事项
- 只有模式的所有者或者被授予了模式ALTER权限的用户，有权限执行ALTER SCHEMA命令，系统管理员默认拥有此权限。
- 非系统管理员要修改模式的所有者或模式的永久表存储空间上限，该用户还必须是新的所有角色的直接或间接成员， 并且该成员必须在此数据库上有CREATE权限。
 
#### 语法格式
- 修改模式的名称。
  ```
  ALTER SCHEMA schema_name 
      RENAME TO new_name;
  ```
  
- 修改模式的所有者。
  ```
  ALTER SCHEMA schema_name 
      OWNER TO new_owner;
  ```
  
 
- 修改模式的永久表存储空间限制。
  ```
  ALTER SCHEMA schema_name 
      WITH PERM SPACE 'space_limit';
  ```
  
#### 参数说明
表1ALTER SCHEMA参数说明 
| 参数                            | 描述            | 取值范围                                                                                                                                        |
|:---|:---|:---|
| schema_name                   | 需要修改的模式名称。    | 已存在的模式名。                                                                                                                                    |
| new_name                      | 模式的新名称。       | 字符串，需符合[标识符命名规范](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0007.html#ZH-CN_TOPIC_0000002202094021__section1475018612353)。 |
| new_owner                     | 模式的新所有者。      | 已存在的用户名/角色名。                                                                                                                                |
| WITH PERM SPACE 'space_limit' | 模式的永久表存储空间上限。 | 字符串格式为正整数+单位，单位当前支持K/M/G/T/P。解析后的数值以K为单位，且范围不能够超过64比特表示的有符号整数，即1KB\~9007199254740991KB。                                                     |
   
#### 示例
创建示例模式schema_test和用户user_a：
```
CREATE SCHEMA schema_test;
CREATE USER user_a PASSWORD '{Password}';
```
将当前模式schema_test更名为schema_test1：
```
ALTER SCHEMA schema_test RENAME TO schema_test1;
```
将schema_test1的所有者修改为user_a：
```
ALTER SCHEMA schema_test1 OWNER TO user_a;
```
#### 示例：创建一个设置了永久存储空间的Schema
以下模拟一个示例，创建一个名为testsche的schema，并设置永久存储空间为10MB，当数据超过该设置值，系统报错。
除了通过SQL语句设置永久存储空间之外，您也可以通过控制台界面进行Schema永久存储空间设置，详情参见[配置DWS数据库的Schema存储空间](https://support.huaweicloud.com/mgtg-dws/dws_01_72366.html)章节。
1. 创建一个名为testsche的schema，并设置永久存储空间为10MB。 
   ```
   DROP SCHEMA IF EXISTS testsche;
   CREATE SCHEMA testsche  WITH PERM SPACE '10M';
   ```
   
   
2. 使用系统表[PG_NAMESPACE](https://support.huaweicloud.com/devg-dws/dws_04_0600.html)查询Schema的表存储间大小，其中permspace为永久存储空间限额，usedspace为已使用永久存储空间大小。
   
   ```
   SELECT permspace,usedspace FROM PG_NAMESPACE WHERE nspname = 'testsche';
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002565133741.png "点击放大")
   
   
3. 创建一张测试表，并导入数据。 
   ```
   DROP TABLE IF EXISTS testsche.src;
   DROP TABLE IF EXISTS testsche.t1;
   CREATE TABLE testsche.src AS SELECT 1;
   CREATE TABLE testsche.t1(a int, b numeric(15,2)) WITH(orientation=column);
   INSERT INTO testsche.t1 SELECT generate_series(1,20000000) % 1000,generate_series(1,20000000) FROM testsche.src;
   ```
   回显报错信息，超过该schema的永久存储空间大小。
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002534495786.png "点击放大")
   
   
4. 调大Schema的永久存储空间大小为10GB，再次导入，显示成功。 
   ```
   ALTER SCHEMA testsche WITH PERM SPACE '10G';
   INSERT INTO testsche.t1 SELECT generate_series(1,20000000) % 1000,generate_series(1,20000000) FROM testsche.src;
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002565526677.png "点击放大")
   
   
5. 查看已用空间。 
   ```
   SELECT permspace,usedspace FROM PG_NAMESPACE WHERE nspname = 'testsche';
   ```
   ![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002565447077.png "点击放大")
   
   
 
#### 相关链接
[CREATE SCHEMA](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0173.html)，[DROP SCHEMA](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0204.html)
[配置DWS数据库的Schema存储空间](https://support.huaweicloud.com/mgtg-dws/dws_01_72366.html)
