如何进行更新扩展
How to make an update extension
让我们考虑使用此函数形成的扩展:
CREATE OR REPLACE FUNCTION public.foo()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'foo v.1.0';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
这是myextension--1.0.sql
这是myextension.control
# extension prueba
comment = 'prueba para updatear extensiones'
default_version = '1.0'
module_pathname = '$libdir/unaccent'
relocatable = true
正在做
CREATE EXTENSION myextension
一切都好。
现在,我需要更新此功能并添加另一个功能。
会是myextension--2.0.sql
CREATE OR REPLACE FUNCTION public.foo()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'foo v.2.0';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE OR REPLACE FUNCTION public.bar()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'bar v.1.0';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
然后,我不知道我必须如何准备才能获得更新的扩展。我一直在观察与 postgres 一起安装的任何扩展,例如 unnaccent 但我不了解更新机制。看起来好像 unaccent--1.1.sql
具有所有功能(新功能和更新的功能)并且 unaccent--1.0--1.1.sql
具有更新位于 unaccent--1.1.sql
[=28 中的现有功能的说明=]
谢谢。
更新
根据答案,我用这些语句创建了 myextension--1.0--2.0.sql
:
ALTER FUNCTION foo() PARALLEL SAFE;
此外,我更改了 myextension.control
中的默认版本
default_version = '2.0'
但如果我这样做:
ALTER EXTENSION myextension UPDATE;
Postgres 告诉我更新成功了,我有 2.0 版本,但是既没有更新 foo()
也没有创建 bar()
。
unaccent--1.0--1.1.sql
有 SQL 语句来更新 unaccent--1.0.sql
安装的 1.0 版。
CREATE EXTENSION
自动查找一系列 SQL 脚本以 运行 安装所需版本。如果没有安装所需版本的“基本”SQL 脚本,它将从较低版本开始,然后应用“增量”脚本,直到它具有所需版本。
让我们考虑使用此函数形成的扩展:
CREATE OR REPLACE FUNCTION public.foo()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'foo v.1.0';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
这是myextension--1.0.sql
这是myextension.control
# extension prueba
comment = 'prueba para updatear extensiones'
default_version = '1.0'
module_pathname = '$libdir/unaccent'
relocatable = true
正在做
CREATE EXTENSION myextension
一切都好。
现在,我需要更新此功能并添加另一个功能。
会是myextension--2.0.sql
CREATE OR REPLACE FUNCTION public.foo()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'foo v.2.0';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE OR REPLACE FUNCTION public.bar()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'bar v.1.0';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
然后,我不知道我必须如何准备才能获得更新的扩展。我一直在观察与 postgres 一起安装的任何扩展,例如 unnaccent 但我不了解更新机制。看起来好像 [=28 中的现有功能的说明=]
unaccent--1.1.sql
具有所有功能(新功能和更新的功能)并且 unaccent--1.0--1.1.sql
具有更新位于 unaccent--1.1.sql
谢谢。
更新
根据答案,我用这些语句创建了 myextension--1.0--2.0.sql
:
ALTER FUNCTION foo() PARALLEL SAFE;
此外,我更改了 myextension.control
default_version = '2.0'
但如果我这样做:
ALTER EXTENSION myextension UPDATE;
Postgres 告诉我更新成功了,我有 2.0 版本,但是既没有更新 foo()
也没有创建 bar()
。
unaccent--1.0--1.1.sql
有 SQL 语句来更新 unaccent--1.0.sql
安装的 1.0 版。
CREATE EXTENSION
自动查找一系列 SQL 脚本以 运行 安装所需版本。如果没有安装所需版本的“基本”SQL 脚本,它将从较低版本开始,然后应用“增量”脚本,直到它具有所需版本。