更新时间:2024-11-12 GMT+08:00
分享

ALTER PACKAGE

功能描述

修改PACKAGE的属性或重编译包。

注意事项

  • 目前仅支持ALTER PACKAGE OWNER功能,系统管理员默认拥有该权限,有以下权限约束:
    • 当前用户必须是该package的所有者或者系统管理员,且该用户是新所有者角色的成员。
  • 当打开三权分立时,即使是系统管理员,也必须拥有用户组权限才能修改package的owner,DEFINER类型package不允许修改所有者。
  • 只有初始化用户才能修改package的owner为初始化用户。
  • 当关闭三权分立时,仅系统管理员以上权限可以修改package所有者,但不允许修改所有者为运维管理员。
  • 不允许系统管理员将DEFINER类型的package的所有者改为初始用户或运维管理员。

语法格式

  • 修改package的所有者。
    ALTER PACKAGE package_name OWNER TO new_owner;

  • 重编译包
    ALTER PACKAGE package_name COMPILE [PACKAGE | BODY | SPECIFICATION];

参数说明

  • package_name

    要修改的package名称。

    取值范围:已存在的package名,仅支持修改单个package。

  • new_owner

    package的新所有者。要修改函数的所有者,新所有者必须拥有该package所属模式的CREATE权限。

    取值范围:已存在的用户角色。

示例

  • 修改PACKAGE的所有者。
    --创建PACKAGE。
    gaussdb=# CREATE OR REPLACE PACKAGE test_pkg AS
        pkg_var int := 1;
        PROCEDURE test_pkg_proc(var int);
    END test_pkg;
    /
    gaussdb=# CREATE OR REPLACE PACKAGE BODY test_pkg AS
        PROCEDURE test_pkg_proc(var int) AS
        BEGIN
            pkg_var := 1;
        END;
    END test_pkg;
    /
    
    --创建用户。
    gaussdb=# CREATE ROLE test PASSWORD '********';
    
    --修改包的所有者。
    gaussdb=# ALTER PACKAGE test_pkg OWNER TO test;
    
    --查询test_pkg的所有者。
    gaussdb=# SELECT t1.pkgname,t2.rolname FROM gs_package t1, gs_roles t2 WHERE t1.pkgname = 'test_pkg' AND t1.pkgowner = t2.oid;
     pkgname  | rolname 
    ----------+---------
     test_pkg | test
    (1 row)
  • 重编译包。
    --重编译包。
    gaussdb=# ALTER PACKAGE test_pkg COMPILE;
    
    --删除。
    gaussdb=# DROP PACKAGE test_pkg;
    gaussdb=# DROP ROLE test;
    --关闭依赖功能。
    gaussdb=# RESET behavior_compat_options;

相关链接

CREATE PACKAGEDROP PACKAGE

相关文档