如何进行更新扩展

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 脚本,它将从较低版本开始,然后应用“增量”脚本,直到它具有所需版本。