VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

ALTER EXTENSION

功能描述

修改插件扩展。

注意事项

ALTER EXTENSION 修改一个已安装的扩展的定义。这里有几种方式:

  • UPDATE

    更新扩展到一个新的版本。这个扩展必须满足一个适用的更新脚本(或者一系列脚本)这样就能修改当前安装版本到一个要求的版本。

  • SET SCHEMA

    移动扩展对象到另一个模式。这个扩展必须relocatable才能使命令成功。

    relocatable(boolean):扩展的可再定位性,如果支持扩展能被重定位到另一个模式则为true,默认为false。三种支持的可定位性级别如下:

    • 一个完全可重定位的扩展能在任何时候被移动到另一个模式中,即使在它被载入到一个数据库中之后。这种移动通过ALTER EXTENSION SET SCHEMA命令完成,该命令会自动地把所有成员对象重命名到新的模式中,它的控制文件中需要设置relocatable = true。
    • 一个扩展可能在安装过程中是可重定位的,但是安装完后就不再可重定位。典型的情况是扩展的脚本文件需要显式地引用目标模式,例如为 SQL 函数设置search_path属性。对于这样一种扩展,在其控制文件中设置relocatable = false,并且使用@extschema@在脚本文件中引用目标模式。在脚本被执行前,所有这个字符串的出现都将被替换为实际的目标模式名。用户可以使用CREATE EXTENSION的SCHEMA选项设置目标模式名。
    • 如果扩展根本就不支持重定位,在它的控制文件中设置relocatable = false,并且还设置schema为想要的目标模式的名称。这将阻止使用CREATE EXTENSION的SCHEMA选项修改目标模式,除非它指定的是和控制文件中相同的模式。如果该扩展包括关于模式名的内部假设且模式名不能使用@extschema@的方法替换,这种选择通常是必须的。@extschema@替换机制在这种情况中也是可用的,不过由于模式名已经被控制文件所决定,它的使用受到了很大的限制。
  • ADD member_object

    添加一个已存在对象到扩展。这主要在扩展更新脚本上有用。 这个对象接着会被视为扩展的成员;显而易见,该对象只能通过取消扩展来取消 。

  • DROP member_object

    从扩展上移除一个成员对象。 主要在扩展更新脚本上有用。这个对象没有被取消,只是从扩展里分开了。

    用户必须拥有扩展来使用 ALTER EXTENSION。 这个 ADD/DROP 方式要求添加/删除对象的所有权。

语法格式

ALTER EXTENSION name UPDATE [ TO new_version ];
ALTER EXTENSION name SET SCHEMA new_schema;
ALTER EXTENSION name ADD member_object;
ALTER EXTENSION name DROP member_object;

where member_object is:

  FOREIGN TABLE object_name |
  FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |
  [ PROCEDURAL ] LANGUAGE object_name |
  SCHEMA object_name |
  SERVER object_name |
  TABLE object_name |
  TEXT SEARCH CONFIGURATION object_name |
  TYPE object_name |
  VIEW object_name

参数说明

  • name

    已安装扩展的名称。

  • new_version

    扩展的新版本。可以通过被标识符和字面字符重写。如果不指定的扩展的新版本,ALTER EXTENSION UPDATE会更新到扩展的控制文件中显示的默认版本。

  • new_schema

    扩展的新模式。

  • object_name

    从扩展里被添加或移除的对象的名称。包含表、聚合 、域、外链表、操作符、操作符类、操作符族、序列、文本搜索对象、类型和能被模式合格的视图的名称。

  • function_name

    函数名称。

  • argmode

    这个函数参数的模型:IN、OUT、INOUT或者VARIADIC。如果省略的话,默认值为IN。ALTER EXTENSION 不关心OUT参数 ,因为确认函数的一致性只需要输入参数,因此列出IN、INOUT和VARIADIC参数就足够了。

  • argname

    函数参数的名称。ALTER EXTENSION不关心参数名称,确认函数的一致性只需要参数数据类型。

  • argtype

    函数参数的数据类型(可以有模式修饰)。

示例

1、创建扩展。

create extension "uuid-ossp";

2、更新 “uuid-ossp” 扩展到版本 2.0。

ALTER EXTENSION "uuid-ossp" UPDATE TO '2.0';

3、创建模式utils。

CREATE SCHEMA utils;

4、更新 “uuid-ossp”扩展的模式为utils。

ALTER EXTENSION "uuid-ossp" SET SCHEMA utils;

5、创建函数。

create function length(p_one text, p_other text)
returns text
as
$$
select case
when length(p_one) >= length(p_other) then p_one
else p_other
end
$$
language sql
immutable;

6、添加length函数给 “uuid-ossp” 扩展。

ALTER EXTENSION "uuid-ossp" ADD FUNCTION length(p_one text, p_other text);

7、从”uuid-ossp” 扩展扩展删除length函数。

ALTER EXTENSION "uuid-ossp" DROP FUNCTION length(p_one text, p_other text);