drop index site_nodes_parent_id_idx; create index site_nodes_parent_id_idx on site_nodes(parent_id); create or replace function __create_index(name varchar, def varchar) returns integer as $$ declare v_exists integer; begin select into v_exists count(*) from pg_class where relname = name; if v_exists = 0 then execute 'create index ' || name || ' ' || def; end if; return 1; end; $$ language plpgsql; select __create_index('site_nodes_parent_object_node_id_idx','on site_nodes(parent_id, object_id, node_id)'); select __create_index('site_node_object_mappings_node_id_idx','on site_node_object_mappings(node_id)'); drop function __create_index(name varchar, def varchar);