Schema Changes: 3.5.4
Upgrade: 3.5.3 → 3.5.4
This release applied 2 migration(s) to the database schema.
| ID | Type | Description |
|---|---|---|
schema |
convert gist to gin |
|
data |
publisher 264 |
Migration Details
1248 — convert gist to gin
Type: schema
View SQL
DO LANGUAGE plpgsql $$
DECLARE
ind RECORD;
tablist TEXT;
-- We only want to mess with gist indexes in stock Evergreen.
-- If you've added your own convert them or don't as you see fit.
PERFORM
FROM pg_index idx
JOIN pg_class cls ON cls.oid=idx.indexrelid
JOIN pg_namespace sc ON sc.oid = cls.relnamespace
JOIN pg_class tab ON tab.oid=idx.indrelid
JOIN pg_attribute at ON (at.attnum = ANY(idx.indkey) AND at.attrelid = tab.oid)
JOIN pg_am am ON am.oid=cls.relam
WHERE am.amname = 'gist'
AND cls.relname IN (
'authority_full_rec_index_vector_idx',
'authority_simple_heading_index_vector_idx',
'metabib_identifier_field_entry_index_vector_idx',
'metabib_combined_identifier_field_entry_index_vector_idx',
'metabib_title_field_entry_index_vector_idx',
'metabib_combined_title_field_entry_index_vector_idx',
'metabib_author_field_entry_index_vector_idx',
'metabib_combined_author_field_entry_index_vector_idx',
'metabib_subject_field_entry_index_vector_idx',
'metabib_combined_subject_field_entry_index_vector_idx',
'metabib_keyword_field_entry_index_vector_idx',
'metabib_combined_keyword_field_entry_index_vector_idx',
'metabib_series_field_entry_index_vector_idx',
'metabib_combined_series_field_entry_index_vector_idx',
'metabib_full_rec_index_vector_idx'
);
IF NOT FOUND THEN
RETURN;
END IF;
tablist := '';
RAISE NOTICE 'Converting GIST indexes into GIN indexes...';
FOR ind IN SELECT sc.nspname AS sch, tab.relname AS tab, cls.relname AS idx, at.attname AS col
FROM pg_index idx
JOIN pg_class cls ON cls.oid=idx.indexrelid
JOIN pg_namespace sc ON sc.oid = cls.relnamespace
JOIN pg_class tab ON tab.oid=idx.indrelid
JOIN pg_attribute at ON (at.attnum = ANY(idx.indkey) AND at.attrelid = tab.oid)
JOIN pg_am am ON am.oid=cls.relam
WHERE am.amname = 'gist'
AND cls.relname IN (
'authority_full_rec_index_vector_idx',
'authority_simple_heading_index_vector_idx',
'metabib_identifier_field_entry_index_vector_idx',
'metabib_combined_identifier_field_entry_index_vector_idx',
'metabib_title_field_entry_index_vector_idx',
'metabib_combined_title_field_entry_index_vector_idx',
'metabib_author_field_entry_index_vector_idx',
'metabib_combined_author_field_entry_index_vector_idx',
'metabib_subject_field_entry_index_vector_idx',
'metabib_combined_subject_field_entry_index_vector_idx',
'metabib_keyword_field_entry_index_vector_idx',
'metabib_combined_keyword_field_entry_index_vector_idx',
'metabib_series_field_entry_index_vector_idx',
'metabib_combined_series_field_entry_index_vector_idx',
'metabib_full_rec_index_vector_idx'
)
LOOP
-- Move existing index out of the way so there's no difference between new databases and upgraded databases
EXECUTE FORMAT('ALTER INDEX %I.%I RENAME TO %I_gist', ind.sch, ind.idx, ind.idx);
-- Meet the new index, same as the old index (almost)
EXECUTE FORMAT('CREATE INDEX %I ON %I.%I USING GIN (%I)', ind.idx, ind.sch, ind.tab, ind.col);
-- And drop the old index
EXECUTE FORMAT('DROP INDEX %I.%I_gist', ind.sch, ind.idx);
tablist := tablist || ' ' || ind.sch || '.' || ind.tab || E'\n';
END LOOP;
RAISE NOTICE E'Conversion Complete.\n\n You should run a VACUUM ANALYZE on the following tables soon:\n%', tablist;
END $$;