注意事项

创建扩展

安装一个扩展,Yukon目前共提供 postgis、postgis_raster、postgis_sfcgal、yukon_geomodel、yukon_geogridcoder五个扩展,postgis为基础扩展,被其他扩展依赖,因此安装其他扩展之前请先安装基础扩展;

语法

PostgreSQL

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
    [ VERSION version ]
    [ CASCADE ]

openGauss/GaussDB

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
             [ VERSION version ]
             [ FROM old_version ]

参数说明

IF NOT EXISTS

如果系统已经存在一个同名的扩展,不会报错。这种情况下会给出一个提示。请注意该参数不保证系统存在的扩展和现在脚本创建的扩展相同。

extension_name

将被安装扩展的名字。

schema_name

扩展的实例被安装在该模式下,扩展的内容可以被重新安装。指定的模式必须已经存在,如果没有指定,扩展的控制文件也不指定一个模式,这样将使用默认模式。

Note

注意: 扩展不认为它在任何模式里面:扩展在一个数据库范围内的名字是不受限制的,但是一个扩展的实例是属于一个模式的。

version

安装扩展的版本,可以写为一个标识符或者字符串.默认的版本在扩展的控制文件中指定。

CASCADE

自动安装此扩展所依赖但尚未安装的任何扩展。它们的依赖项同样以递归方式自动安装。该子句(如果给定)适用于以这种方式安装的所有扩展。语句的其他选项不适用于自动安装的扩展;特别是,始终选择其默认版本

old_version

当你想升级安装“old style” 模块中没有的内容时,你必须指定FROM old_version。这个选项使CREATE EXTENSION 运行一个安装脚本将新的内容安装到扩展中,而不是创建一个新的实体.注意SCHEMA指定了包括这些已存在实体的模式。

示例

--在当前数据库安装postgis扩展
CREATE EXTENSION postgis;

--在当前数据库安装postgis扩展到指定模式下
CREATE EXTENSION postgis with schema schema_name;

注意事项

1、部分模块在扩展时需要与PostGIS在相同的模式下,否则无法扩展,遇到该情况需要使用[ WITH ] [ SCHEMA schema_name ]指定扩展所属SCHEMA,根据提示扩展到PostGIS相同模式下。 目前postgis_raster、pgrouting、yukon_geogridcoder均需要与PostGIS在相同的模式下。

2、添加扩展后,如果需要用户在非扩展注册所属的模式(schema)下访问yukon函数和类型时,默认情况下不指定模式无法访问,必须指定模式,解决方法详情参考’openGauss/GaussDB 相关模式(schema)说明’。

Note

openGauss/GaussDB非初始化用户扩展时不支持public,使用 [ WITH ] [ SCHEMA schema_name ] 参数添加扩展,如果需要扩展到public下,必须使用数据库初始化用户进行扩展,解决权限有关问题;

移除扩展

Yukon支持从数据库移除扩展模块。

语法

DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

示例

移除postgis扩展:

DROP EXTENSION postgis;

– 如果有对象依赖该扩展,需要加CASCADE关键字进行级联删除

DROP EXTENSION postgis CASCADE;

注意事项

该能力由数据库内核提供,移除扩展将从当前数据库中删除指定扩展模块的相关配置,如果使用CASCADE同时将自动删除依赖于该扩展的对象,其中包括与该模块相关的数据,依赖于此模块的其他扩展和数据,建议谨慎使用 ,提前做好相关数据备份。 参考 DROP EXTENSION 语法

openGauss需要启用兼容参数,在数据库中执行”ALTER SYSTEM SET support_extended_features to on “并根据提示重启数据库,才能正常移除扩展,参考 openGauss文档