假设我已经在涉及postgresql中的函数的表达式上创建了一个btree。
create table t (x int);
create function f(t) returns int
language sql immutable
as $function$
select x + 1;
$function$
create index i on t (f(x));
假设我将f
的定义更改为;
create or replace function f(t) returns int
language sql immutable
as $function$
select x + 2; -- Notice the difference!
$function$
我是否必须手动reindex i
或者postgresql在我更新定义时为我做这件事?如果我不reindex
,我的索引会无效吗?
答案 0 :(得分:2)
结果是postgresql可以让你在不抱怨的情况下更改函数定义,并且只会在更新这些行时更新btree的键。密钥将不一致,但postgresql仍然认为索引有效。
此外,如果其他人尝试这样的事情。进行此更改的(唯一?)一致方法是:
使用reindex
需要t
上的访问权限锁定,因此只需构建新索引即可您可以保持在线阅读!