注意事项
创建扩展
安装一个扩展,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文档