Olá a todos, Gostaria de compartilhar com a lista a função que criei, pois, como não tenho muita experiência com plpgSQL e tampouco conheço as entranhas do PostgreSQL como vocês, acredito que possam me ajudar a torná-la mais suscinta e consequentemente mais rápida.
Desde já obrigado. CREATE OR REPLACE FUNCTION add_tilename(s text, t text, col1 text, col2 text) RETURNS boolean AS $BODY$DECLARE sql1 varchar; sql2 varchar; st varchar; gets varchar; sqlUpdate varchar; objeto RECORD; msg varchar; tile RECORD; tot integer := 0; status integer := 0; idx varchar; countAlterados integer := 0; BEGIN BEGIN st := 'ALTER TABLE '|| s ||'.'|| t ||' DROP COLUMN tilename;'; EXECUTE st; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'tilename does not exists'; END; BEGIN st := 'ALTER TABLE '|| s ||'.'|| t ||' ADD COLUMN tilename text;'; EXECUTE st; EXCEPTION WHEN duplicate_column THEN RAISE NOTICE 'tilename already exists'; END; sql2 := 'SELECT '|| col1 ||' as ra,'|| col2 ||' as dec FROM '|| s ||'.'|| t ||';'; --RAISE NOTICE '%', sql2; FOR objeto IN EXECUTE sql2 LOOP gets := 'SELECT C.tilename FROM public.coadd_tile as C WHERE C.urall < '|| objeto.ra ||' AND C.udecll < '|| objeto.dec ||' AND C.uraur > '|| objeto.ra ||' AND C.udecur > '|| objeto.dec ||' LIMIT 1;'; --RAISE NOTICE '%', gets; FOR tile IN EXECUTE gets LOOP sqlUpdate := 'UPDATE '|| s ||'.'|| t ||' SET tilename = '''||tile.tilename||''' WHERE q3c_radial_query('|| col1 ||', '|| col2 ||', '|| objeto.ra ||', '|| objeto.dec ||', 0.001);'; --RAISE NOTICE '%', sqlUpdate; EXECUTE sqlUpdate; countAlterados = countAlterados +1; END LOOP; tot = tot + 1; RAISE NOTICE 'VARRIDOS%', tot; END LOOP; -- criar indices na coluna tilename idx := 'CREATE INDEX '|| t ||'_tilename ON '|| s ||'.'|| t ||' (tilename);'; EXECUTE idx; RAISE NOTICE 'SQL INDEX %', idx; RAISE NOTICE 'DEBUG 2 %', tot; RAISE NOTICE 'Alterados: %', countAlterados; RETURN true; EXCEPTION WHEN OTHERS THEN RETURN false; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION add_tilename(text, text, text, text) -- Att. Carlos Adean skype: carlosadean | fb.com/carlosadean "There are only 10 types of people in the world: Those who understand binary, and those who don't."
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral