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

Responder a