更新时间:2026-04-10 GMT+08:00
分享

ALTER SCHEMA

功能描述

修改模式属性。

注意事项

  • 只有模式的所有者或者被授予了模式ALTER权限的用户,有权限执行ALTER SCHEMA命令,系统管理员默认拥有此权限。
  • 非系统管理员要修改模式的所有者或模式的永久表存储空间上限,该用户还必须是新的所有角色的直接或间接成员, 并且该成员必须在此数据库上有CREATE权限。

语法格式

  • 修改模式的名称。
    1
    2
    ALTER SCHEMA schema_name 
        RENAME TO new_name;
    
  • 修改模式的所有者。
    1
    2
    ALTER SCHEMA schema_name 
        OWNER TO new_owner;
    
  • 修改模式的永久表存储空间限制。
    1
    2
    ALTER SCHEMA schema_name 
        WITH PERM SPACE 'space_limit';
    

参数说明

表1 ALTER SCHEMA参数说明

参数

描述

取值范围

schema_name

需要修改的模式名称。

已存在的模式名。

new_name

模式的新名称。

字符串,需符合标识符命名规范

new_owner

模式的新所有者。

已存在的用户名/角色名。

WITH PERM SPACE 'space_limit'

模式的永久表存储空间上限。

字符串格式为正整数+单位,单位当前支持K/M/G/T/P。解析后的数值以K为单位,且范围不能够超过64比特表示的有符号整数,即1KB~9007199254740991KB。

示例

创建示例模式schema_test和用户user_a:

1
2
CREATE SCHEMA schema_test;
CREATE USER user_a PASSWORD '{Password}';

将当前模式schema_test更名为schema_test1:

1
ALTER SCHEMA schema_test RENAME TO schema_test1;

将schema_test1的所有者修改为user_a:

1
ALTER SCHEMA schema_test1 OWNER TO user_a;

示例:创建一个设置了永久存储空间的Schema

以下模拟一个示例,创建一个名为testsche的schema,并设置永久存储空间为10MB,当数据超过该设置值,系统报错。

除了通过SQL语句设置永久存储空间之外,您也可以通过控制台界面进行Schema永久存储空间设置,详情参见配置DWS数据库的Schema存储空间章节。

  1. 创建一个名为testsche的schema,并设置永久存储空间为10MB。

    1
    CREATE SCHEMA testsche  WITH PERM SPACE '10M';
    

  2. 使用系统表PG_NAMESPACE查询Schema的表存储间大小,其中permspace为永久存储空间限额,usedspace为已使用永久存储空间大小。

    1
    SELECT permspace,usedspace FROM PG_NAMESPACE WHERE nspname = 'testsche';
    

  3. 创建一张测试表,并导入数据。

    1
    2
    3
    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的永久存储空间大小。

  4. 调大Schema的永久存储空间大小为10GB,再次导入,显示成功。

    1
    2
    ALTER SCHEMA testsche WITH PERM SPACE '10G';
    INSERT INTO testsche.t1 SELECT generate_series(1,20000000) % 1000,generate_series(1,20000000) FROM testsche.src;
    

  5. 查看已用空间。

    1
    SELECT permspace,usedspace FROM PG_NAMESPACE WHERE nspname = 'testsche';
    

相关文档