ถ้าคุณต้องการแบตช์สร้างดัชนีในคอลัมน์รูปทรงเรขาคณิตคุณสามารถลองใช้ฟังก์ชั่น plpgsql ที่ฉันเพิ่งทำไปแล้ว:
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;
ฉันไม่ได้ลองด้วยความโกรธในฐานข้อมูลของฉัน แต่ดูเหมือนว่าจะทำงาน
หากต้องการใช้งานให้เรียกใช้SELECT
คำสั่งเช่นนี้:
select BatchIndex('public', f_table_name, f_geometry_column) from geometry_columns where f_table_schema = 'public';
หากต้องการสร้างดัชนีในคอลัมน์รูปทรงเรขาคณิตทั้งหมดคุณสามารถใช้ดัชนีดังนี้:
select BatchIndex(f_table_schema, f_table_name, f_geometry_column) from geometry_columns;
หลังจากนั้นให้เรียกใช้ a VACUUM ANALYZE
เพื่อจัดระเบียบทุกอย่างให้เรียบร้อย