更新时间:2025-09-11 GMT+08:00
分享

ALTER DATABASE

功能描述

M-Compatibility中DATABASE和SCHEMA是同义词,该语法允许修改数据库或模式的字符集、字符序、和所有者。

注意事项

  • 只有模式的所有者或者被授予了模式ALTER权限的用户有权限执行ALTER DATABASE命令,三权分立开关关闭时,系统管理员默认拥有此权限。但要修改模式的所有者,当前用户必须是该模式的所有者或者系统管理员,且该用户是新所有者角色的成员。
  • 对于除public以外的系统模式,如pg_catalog、sys等,只允许初始用户修改模式的所有者。修改系统自带模式的名称可能会导致部分功能不可用甚至影响数据库正常运行,默认情况下不允许修改系统自带模式的名称,考虑到前向兼容性,仅允许当系统在启动或升级过程中或参数allow_system_table_mods为on时修改。
  • 除初始用户外,其他用户无法将schema的所有者修改为运维管理员。

语法格式

  • 修改数据库所有者。
    ALTER DATABASE database_name 
        OWNER TO new_owner;
  • 修改数据库字符集、字符序。
    ALTER {DATABASE | SCHEMA} database_name
        [create_option] ...
    create_option: [DEFAULT] {
        CHARACTER SET [=] default_charset
      | CHAR SET [=] default_charset
      | CHARSET [=] default_charset
      | COLLATE [=] default_collation
    }

参数说明

  • database_name

    需要修改属性的数据库名称。

    取值范围:字符串,要符合标识符说明

  • new_owner

    数据库的新所有者。

    取值范围:字符串,有效的用户名,用户名要求详见•user_name

  • COLLATE [=] default_collation

    可选。指定数据库使用的字符集。例如,通过collate = 'zh_CN.gbk'设定该参数。

    该参数的使用会影响到对字符串的排序顺序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的字符集。

    取值范围:参考库级字符集和字符序

  • {CHAR SET | CHARSET | CHARACTER SET} [=] default_charset

    可选。指定数据库使用的字符分类。例如,通过CHARSET = 'zh_CN.gbk'设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。

    取值范围:参考库级字符集和字符序

示例

  • 修改数据库字符集、字符序
    --创建数据库test_db1。
    m_db=# CREATE DATABASE test_db1;
    --将test_db1的字符集改为utf8。
    m_db=# ALTER DATABASE test_db1 CHARSET utf8;
    --将test_db1的字符序改为utf8mb4_bin。
    m_db=# ALTER DATABASE test_db1 COLLATE utf8mb4_bin;
  • 修改数据库所有者。
    --创建用户scott。
    m_db=# CREATE USER scott PASSWORD '********';
    --将test_db1的所有者修改为scott。
    m_db=# ALTER DATABASE test_db1 OWNER TO scott;

相关链接

CREATE DATABASEDROP DATABASE

相关文档