Si desea crear índices por lotes en columnas de geometría, puede probar esta función plpgsql que acabo de activar:
CREATE OR REPLACE FUNCTION BatchIndex(sn text, tn text, cn text) RETURNS void AS $$
DECLARE i_exists integer;
DECLARE idxname text;
BEGIN
idxname := 'idx_' || tn || '_' || cn;
select into i_exists count(*) from pg_class where relname = idxname;
IF i_exists = 0 THEN
EXECUTE 'CREATE INDEX ' ||idxname || ' ON '
|| sn || '.' || tn
|| ' USING GIST(' || cn || ')';
END IF;
END;
$$ LANGUAGE plpgsql;
No lo he probado con ira en mi base de datos, pero parece hacer el trabajo.
Para usarlo, solo ejecuta una SELECT
declaración como esta:
select BatchIndex('public', f_table_name, f_geometry_column) from geometry_columns where f_table_schema = 'public';
Para crear índices en todas las columnas de geometría, puede usarlo así:
select BatchIndex(f_table_schema, f_table_name, f_geometry_column) from geometry_columns;
Luego, ejecute un VACUUM ANALYZE
para ordenar todo.
unknown
lugar decharacter varying
activar alarmas, pero no puedo ver dónde tiene un problema. Pensaré un poco, mientras tanto, ¿a algún gurú de PostgreSQL le gustaría probarlo? :)