我有一个大的postgres表,它是分区的。
表已被索引。
为每个分区分别创建索引。
我的问题是
创建索引时,也会在子表上创建索引。
drop语句中只删除指定的索引。
显示
WARNING: Only dropped the index "my_index_name"
HINT: To drop other indexes on child partitions, drop each one explicitly.
DROP INDEX
如何删除子分区上的索引,而不是逐个删除(因为我有255个子表)
有点乱,但只要索引不被任何约束使用,您就可以这样做:
CREATE OR REPLACE FUNCTION drop_child_indexes(parent text, partial text)
RETURNS VOID AS
$$
DECLARE
q text;
x RECORD;
BEGIN
q := 'SELECT indexname FROM pg_catalog.pg_indexes WHERE tablename ~ '''
|| partial
|| ''' AND tablename != '''
|| parent || '''';
FOR x IN EXECUTE q LOOP
EXECUTE 'DROP INDEX ' || x.indexname;
RAISE NOTICE 'Dropping index %', x.indexname;
END LOOP;
END;
$$ LANGUAGE plpgsql;
"父"变量是您不想要删除索引的任何表,"partial"变量是与分区表名称匹配的子字符串(这是假设分区被命名为"some_common_prefix_2013_04"之类的正常情况)。这可能不是您所需要的,但它可能会给您一些想法