更新时间: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的所有者。
--创建数据库。 gaussdb=# CREATE DATABASE test DBCOMPATIBILITY 'ORA'; gaussdb=# \c test --创建PACKAGE。 test=# CREATE OR REPLACE PACKAGE test_pkg AS pkg_var int := 1; PROCEDURE test_pkg_proc(var int); END test_pkg; / test=# CREATE OR REPLACE PACKAGE BODY test_pkg AS PROCEDURE test_pkg_proc(var int) AS BEGIN pkg_var := 1; END; END test_pkg; / --创建用户。 test=# CREATE ROLE test PASSWORD '********'; --修改包的所有者。 test=# ALTER PACKAGE test_pkg OWNER TO test; --查询test_pkg的所有者。 test=# 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) --删除。 test=# DROP PACKAGE test_pkg; test=# DROP ROLE test; --切换至默认数据库(根据实际情况修改数据库名)。 test=# \c postgres gaussdb=# DROP DATABASE test;
父主题: A