【发布时间】:2013-07-11 19:25:20
【问题描述】:
当我更改底层函数时,基于函数构建的索引会发生什么情况?
说,我有一个函数clean_name()定义为:
CREATE OR REPLACE FUNCTION clean_name(n text)
RETURNS TEXT AS
$BODY$
DECLARE
rec TEXT;
BEGIN
EXECUTE
'SELECT Regexp_replace(' || quote_literal(n) || ', ''[a-z]'', '''', ''g'');'
INTO rec;
RETURN rec;
END;
$BODY$ LANGUAGE plpgsql IMMUTABLE
;
然后创建一个索引:
CREATE INDEX my_table_upper_name_btree
ON schema.my_table USING GIST (my_text_field);
但后来我决定重新定义删除大写字母的函数。我创建的索引会发生什么?它会自行改变吗?我还要DROP 和CREATE 吗? VACUUM [ANALYZE] [FULL]?
(所讨论的功能类似,而是使用了一系列相当长的替代品,这些替代品仍在调整中,但预计会稳定。)
【问题讨论】:
-
无论版本如何,我都对答案感兴趣。
-
那需要说明——最好附上你实际使用的版本。
标签: function postgresql indexing plpgsql