Nếu bạn muốn tạo các chỉ mục hàng loạt trên các cột hình học, bạn có thể thử chức năng plpgsql này mà tôi vừa gõ:
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;
Tôi đã không thử nó trong sự tức giận trên cơ sở dữ liệu của tôi, nhưng nó dường như thực hiện công việc.
Để sử dụng nó, chỉ cần chạy một SELECT
tuyên bố như thế này:
select BatchIndex('public', f_table_name, f_geometry_column) from geometry_columns where f_table_schema = 'public';
Để tạo chỉ mục trên tất cả các cột hình học, bạn có thể sử dụng nó như thế này:
select BatchIndex(f_table_schema, f_table_name, f_geometry_column) from geometry_columns;
Sau đó, chạy một VACUUM ANALYZE
để dọn dẹp mọi thứ lên.