é uma solução "bonita", mas cada view dessa possui o JOIN para várias
tabelas e ficaria uma coisa louca gerenciar o monte de triggers
necessarias. Só pra ter uma ideia olha só nessa consulta (que é uma
view):

--- CONSULTA ----
 SELECT testemunho.numtombo, familia.nometaxon::character varying(30)
AS familia, (( SELECT
                CASE
                    WHEN arvoretaxon.aux_genero =
arvoretaxon.aux_familia THEN NULL::character varying
                    ELSE genero.nometaxon
                END AS nometaxon))::character varying(45) AS genero, (( SELECT
                CASE
                    WHEN (( SELECT unidadetaxon.nivelunidtaxon
                       FROM jabot.unidadetaxon
                      WHERE unidadetaxon.codunidtaxon =
arvoretaxon.codunidtaxon)) = 140 THEN arvoretaxon.nometaxon
                    ELSE ( SELECT
                            CASE
                                WHEN (( SELECT unidadetaxon.nivelunidtaxon
                                   FROM jabot.unidadetaxon
                                  WHERE unidadetaxon.codunidtaxon =
arvoretaxon.codunidtaxon)) < 140 THEN NULL::character varying
                                ELSE ( SELECT parenteacima_taxon.epitetotaxon
                                   FROM
jabot.parenteacima_taxon(arvoretaxon.codarvtaxon, 140)
parenteacima_taxon(codarvtaxon, nomecompletotaxon, nivelunidtaxon,
linhasuperior_html, linhaespecie_html, linhainfra_html, unidtaxon,
statusvalidade, epitetotaxon, autortaxon))
                            END AS "case")
                END AS "case"))::character varying(45) AS sp, (( SELECT
                CASE
                    WHEN (( SELECT unidadetaxon.nivelunidtaxon
                       FROM jabot.unidadetaxon
                      WHERE unidadetaxon.codunidtaxon =
arvoretaxon.codunidtaxon)) = 140 THEN arvoretaxon.autortaxon
                    ELSE ( SELECT
                            CASE
                                WHEN (( SELECT unidadetaxon.nivelunidtaxon
                                   FROM jabot.unidadetaxon
                                  WHERE unidadetaxon.codunidtaxon =
arvoretaxon.codunidtaxon)) < 140 THEN NULL::character varying
                                ELSE ( SELECT parenteacima_taxon.autortaxon
                                   FROM
jabot.parenteacima_taxon(arvoretaxon.codarvtaxon, 140)
parenteacima_taxon(codarvtaxon, nomecompletotaxon, nivelunidtaxon,
linhasuperior_html, linhaespecie_html, linhainfra_html, unidtaxon,
statusvalidade, epitetotaxon, autortaxon))
                            END AS "case")
                END AS "case"))::character varying(100) AS autorsp, (( SELECT
                CASE
                    WHEN (( SELECT unidadetaxon.nivelunidtaxon
                       FROM jabot.unidadetaxon
                      WHERE unidadetaxon.codunidtaxon =
arvoretaxon.codunidtaxon)) > 140 THEN arvoretaxon.nometaxon
                    ELSE NULL::character varying
                END AS "case"))::character varying(25) AS infrasp,
categoriatypus.nomecattypus::character varying(20) AS nat_typus,
arvoretaxon.aux_especie::character varying(100) AS taxoncompleto,
pais.nomeunidgeo::character varying(50) AS pais,
estado.nomeunidgeo::character varying(80) AS estado_prov, (( SELECT
                CASE
                    WHEN unidgeopolitica.codtipounidgeo >= 5 THEN
unidgeopolitica.nomeunidgeo
                    ELSE NULL::character varying
                END AS "case"))::character varying(50) AS cidade, (
SELECT btrim("replace"("replace"((((((((( SELECT
                        CASE
                            WHEN detacesso.coduc IS NOT NULL THEN ( SELECT
                                    CASE
                                        WHEN (( SELECT v_unidcons.nomepessoa
                                           FROM jabot.v_unidcons
                                          WHERE v_unidcons.codpessoa =
detacesso.coduc)) IS NOT NULL THEN ((( SELECT v_unidcons.nomepessoa
                                           FROM jabot.v_unidcons
                                          WHERE v_unidcons.codpessoa =
detacesso.coduc))::text) || ' | '::text
                                        ELSE ( SELECT
                                                CASE
                                                    WHEN
btrim(detacesso.aux_uc::text) = ''::text OR detacesso.aux_uc IS NULL
THEN ''::text
                                                    ELSE
btrim(detacesso.aux_uc::text) || ' | '::text
                                                END AS "case")
                                    END AS "case")
                            ELSE ( SELECT
                                    CASE
                                        WHEN
btrim(detacesso.aux_uc::text) = ''::text OR detacesso.aux_uc IS NULL
THEN ''::text
                                        ELSE
btrim(detacesso.aux_uc::text) || ' | '::text
                                    END AS "case")
                        END AS "case")) || (( SELECT
                        CASE
                            WHEN detacesso.area IS NULL OR
btrim(detacesso.area::text) = ''::text THEN ''::text
                            ELSE ('Área '::text ||
detacesso.area::text) || ' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.descrlocal IS NULL OR
btrim(detacesso.descrlocal) = ''::text THEN ( SELECT
                                    CASE
                                        WHEN detacesso.aux_procedencia
IS NULL OR btrim(detacesso.aux_procedencia::text) = ''::text THEN
''::text
                                        ELSE
detacesso.aux_procedencia::text || ' | '::text
                                    END AS "case")
                            ELSE detacesso.descrlocal || ' | '::text
                        END AS "case"))) || ((( SELECT
calc_georefpt_testem.latlong_txt
                   FROM
jabot.calc_georefpt_testem(testemunho.codtestemunho)
calc_georefpt_testem(latlong_txt, latitude_dd, longitude_dd,
precisao_georef, msg_precisao_georef, lat_grau, lat_min, lat_seg,
nortesul, long_grau, long_min, long_seg, lesteoeste)))::text)) || ((
SELECT
                        CASE
                            WHEN detacesso.coletaemcultivo IS NULL AND
detacesso.coletorcultivo IS NULL THEN ''::text
                            ELSE ((('Coleta em cultivo: '::text || (( SELECT
                                    CASE
                                        WHEN detacesso.coletaemcultivo
IS NULL THEN ''::text
                                        ELSE
detacesso.coletaemcultivo::text || ' | '::text
                                    END AS "case"))) || (( SELECT
                                    CASE
                                        WHEN detacesso.coletorcultivo
IS NULL THEN 's.col.'::text || ' | '::text
                                        ELSE
detacesso.coletorcultivo::text || ' | '::text
                                    END AS "case"))) || (( SELECT
                                    CASE
                                        WHEN
detacesso.numcoleta_cultivo IS NULL THEN 's.n.'::text || ' | '::text
                                        ELSE
detacesso.numcoleta_cultivo::text || ' | '::text
                                    END AS "case"))) || (( SELECT
                                    CASE
                                        WHEN
detacesso.datacoleta_cultivo IS NULL THEN 's.d.'::text || ' | '::text
                                        ELSE
detacesso.datacoleta_cultivo::text || ' | '::text
                                    END AS "case"))
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.aux_tipovegetacao IS NULL
OR btrim(detacesso.aux_tipovegetacao::text) = ''::text THEN ''::text
                            ELSE detacesso.aux_tipovegetacao::text ||
' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.altprof IS NULL OR
btrim(detacesso.altprof::text) = ''::text THEN ''::text
                            ELSE (( SELECT
                                    CASE
                                        WHEN
"substring"(detacesso.altprof::text, 1, 1) = '-'::text THEN 'Prof.:
'::text
                                        ELSE 'Elev.: '::text
                                    END AS "case")) || (( SELECT
                                    CASE
                                        WHEN detacesso.altprofmaxima
IS NULL THEN ( SELECT
                                                CASE
                                                    WHEN
detacesso.unidmedaltprof IS NULL THEN detacesso.altprof::text || ' |
'::text
                                                    ELSE
((detacesso.altprof::text || ' '::text) || ((( SELECT
unidmedida.siglaunidmed
                                                       FROM jabot.unidmedida
                                                      WHERE
unidmedida.codunidmed = detacesso.unidmedaltprof))::text)) || ' |
'::text
                                                END AS "case")
                                        ELSE ( SELECT
                                                CASE
                                                    WHEN
detacesso.unidmedaltprof IS NULL THEN ((detacesso.altprof::text ||
'-'::text) || detacesso.altprofmaxima::text) || ' | '::text
                                                    ELSE
((((detacesso.altprof::text || '-'::text) ||
detacesso.altprofmaxima::text) || ' '::text) || ((( SELECT
unidmedida.siglaunidmed
                                                       FROM jabot.unidmedida
                                                      WHERE
unidmedida.codunidmed = detacesso.unidmedaltprof))::text)) || ' |
'::text
                                                END AS "case")
                                    END AS "case"))
                        END AS "case"))) || ((( SELECT
calc_georefpt_testem.latlong_txt
                   FROM
jabot.calc_georefpt_testem(testemunho.codtestemunho)
calc_georefpt_testem(latlong_txt, latitude_dd, longitude_dd,
precisao_georef, msg_precisao_georef, lat_grau, lat_min, lat_seg,
nortesul, long_grau, long_min, long_seg, lesteoeste)))::text), '.
|'::text, ' |'::text), ' |'::text, '.'::text)) AS btrim) AS
descrlocal, (( SELECT calc_georef_testem.latitude_dd
           FROM jabot.calc_latdd_testem(testemunho.codtestemunho)
calc_georef_testem(latlong_txt, latitude_dd, longitude_dd,
precisao_georef, msg_precisao_georef, lat_grau, lat_min, lat_seg,
nortesul, long_grau, long_min, long_seg, lesteoeste)))::numeric(7,4)
AS latitude, (( SELECT calc_georef_testem.longitude_dd
           FROM jabot.calc_longdd_testem(testemunho.codtestemunho)
calc_georef_testem(latlong_txt, latitude_dd, longitude_dd,
precisao_georef, msg_precisao_georef, lat_grau, lat_min, lat_seg,
nortesul, long_grau, long_min, long_seg, lesteoeste)))::numeric(7,4)
AS longitude, (( SELECT
                CASE
                    WHEN detacesso.codcoletor IS NOT NULL THEN (
SELECT v_cientista.acronimo_coletor
                       FROM jabot.v_cientista
                      WHERE v_cientista.codcientista = detacesso.codcoletor)
                    ELSE detacesso.aux_coletprinc
                END AS aux_coletprinc))::character varying(60) AS
coletor, detacesso.aux_numcolprinc AS numcoleta, ( SELECT
                CASE
                    WHEN detacesso.diaacesso1::text <> ''::text AND
isnumeric(detacesso.diaacesso1::text) IS TRUE THEN
detacesso.diaacesso1::integer
                    ELSE NULL::integer
                END AS "case") AS diacoleta, ( SELECT
                CASE
                    WHEN detacesso.mesacesso1::text <> ''::text AND
isnumeric(detacesso.mesacesso1::text) IS TRUE THEN
detacesso.mesacesso1::integer
                    ELSE NULL::integer
                END AS "case") AS mescoleta, ( SELECT
                CASE
                    WHEN detacesso.anoacesso1::text <> ''::text AND
isnumeric(detacesso.anoacesso1::text) IS TRUE THEN
detacesso.anoacesso1::integer
                    ELSE NULL::integer
                END AS "case") AS anocoleta,
determinacao.aux_detpor::character varying(50) AS determinador,
determinacao.diadeterm, determinacao.mesdeterm,
determinacao.anodeterm, ( SELECT btrim("replace"("replace"(((((((((((
SELECT
                        CASE
                            WHEN detacesso.descrambiente IS NULL OR
btrim(detacesso.descrambiente) = ''::text THEN ''::text
                            ELSE detacesso.descrambiente || ' | '::text
                        END AS "case")) || (( SELECT
                        CASE
                            WHEN detacesso.aux_tipovegetacao IS NULL
OR btrim(detacesso.aux_tipovegetacao::text) = ''::text THEN ''::text
                            ELSE detacesso.aux_tipovegetacao::text ||
' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.altprof IS NULL OR
btrim(detacesso.altprof::text) = ''::text THEN ''::text
                            ELSE (( SELECT
                                    CASE
                                        WHEN
"substring"(detacesso.altprof::text, 1, 1) = '-'::text THEN 'Prof.:
'::text
                                        ELSE 'Elev.: '::text
                                    END AS "case")) || (( SELECT
                                    CASE
                                        WHEN detacesso.altprofmaxima
IS NULL THEN ( SELECT
                                                CASE
                                                    WHEN
detacesso.unidmedaltprof IS NULL THEN detacesso.altprof::text || ' |
'::text
                                                    ELSE
((detacesso.altprof::text || ' '::text) || ((( SELECT
unidmedida.siglaunidmed
                                                       FROM jabot.unidmedida
                                                      WHERE
unidmedida.codunidmed = detacesso.unidmedaltprof))::text)) || ' |
'::text
                                                END AS "case")
                                        ELSE ( SELECT
                                                CASE
                                                    WHEN
detacesso.unidmedaltprof IS NULL THEN ((detacesso.altprof::text ||
'-'::text) || detacesso.altprofmaxima::text) || ' | '::text
                                                    ELSE
((((detacesso.altprof::text || '-'::text) ||
detacesso.altprofmaxima::text) || ' '::text) || ((( SELECT
unidmedida.siglaunidmed
                                                       FROM jabot.unidmedida
                                                      WHERE
unidmedida.codunidmed = detacesso.unidmedaltprof))::text)) || ' |
'::text
                                                END AS "case")
                                    END AS "case"))
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN btrim(detacesso.descrindividuo) =
''::text OR detacesso.descrindividuo IS NULL THEN ''::text
                            ELSE detacesso.descrindividuo || ' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.altura IS NULL OR
btrim(detacesso.altura::text) = ''::text THEN ''::text
                            ELSE ( SELECT
                                    CASE
                                        WHEN detacesso.unidmedaltura
IS NULL THEN ('Altura: '::text || detacesso.altura::text) || ' |
'::text
                                        ELSE ((('Altura: '::text ||
detacesso.altura::text) || ' '::text) || ((( SELECT
unidmedida.siglaunidmed
                                           FROM jabot.unidmedida
                                          WHERE unidmedida.codunidmed
= detacesso.unidmedaltura))::text)) || ' | '::text
                                    END AS "case")
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.habitat IS NULL OR
btrim(detacesso.habitat::text) = ''::text THEN ''::text
                            ELSE ('Habitat: '::text ||
detacesso.habitat::text) || ' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.habito IS NULL OR
btrim(detacesso.habito::text) = ''::text THEN ''::text
                            ELSE ('Hábito/Forma de vida: '::text ||
detacesso.habito::text) || ' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.aux_frequencia IS NULL OR
btrim(detacesso.aux_frequencia::text) = ''::text THEN ''::text
                            ELSE ('Freqüência: '::text ||
detacesso.aux_frequencia::text) || ' | '::text
                        END AS "case"))) || (( SELECT
                        CASE
                            WHEN detacesso.aux_luminosidade IS NULL OR
btrim(detacesso.aux_luminosidade::text) = ''::text THEN ''::text
                            ELSE ('Luminosidade: '::text ||
detacesso.aux_luminosidade::text) || ' | '::text
                        END AS "case"))) || (((( SELECT
calc_msgprecisao_georef_testem.msg_precisao_georef
                   FROM
jabot.calc_msgprecisao_georef_testem(testemunho.codtestemunho)
calc_msgprecisao_georef_testem(latlong_txt, latitude_dd, longitude_dd,
precisao_georef, msg_precisao_georef, lat_grau, lat_min, lat_seg,
nortesul, long_grau, long_min, long_seg, lesteoeste)))::text) || ' |
'::text), '. |'::text, ' |'::text), ' |'::text, '.'::text)) AS btrim)
AS notas, NULL::character varying::character varying(50) AS
bioma_ibge, testemunho.codtestemunho, v_colbotanica.siglapj AS
siglacolecao, ((( SELECT calc_georef_testem.precisao_georef
           FROM
jabot.calc_precisao_georef_testem(testemunho.codtestemunho)
calc_georef_testem(latlong_txt, latitude_dd, longitude_dd,
precisao_georef, msg_precisao_georef, lat_grau, lat_min, lat_seg,
nortesul, long_grau, long_min, long_seg, lesteoeste))))::character(2)
AS precisao_coord, testemunho.dataultalter,
testemunho.colecoescorrelatas AS coleccorrelat, ( SELECT
                CASE
                    WHEN testemunho.codtipocolbot IS NULL THEN
''::text::character varying
                    ELSE ( SELECT tipocolbotanica.nomeespecime
                       FROM jabot.tipocolbotanica
                      WHERE tipocolbotanica.codtipocolbot =
testemunho.codtipocolbot)
                END AS "case") AS tipoespecime,
arvoretaxon.aux_statconserv AS statconserv, ( SELECT
                CASE
                    WHEN detacesso.coduc IS NOT NULL THEN ( SELECT
v_unidcons.nomepessoa::text AS nomepessoa
                       FROM jabot.v_unidcons
                      WHERE v_unidcons.codpessoa = detacesso.coduc)
                    ELSE NULL::text
                END AS "case") AS unidconserv
   FROM jabot.testemunho
   JOIN jabot.basedados ON testemunho.codbasedados = basedados.codbasedados
   JOIN jabot.determinacao ON testemunho.ultimadeterm =
determinacao.coddeterminacao
   JOIN jabot.detacesso ON testemunho.codacesso = detacesso.coddetacesso
   LEFT JOIN jabot.unidgeopolitica ON detacesso.codunidgeo =
unidgeopolitica.codunidgeo
   JOIN jabot.arvoretaxon ON determinacao.codarvtaxon = arvoretaxon.codarvtaxon
   JOIN jabot.v_colbotanica ON testemunho.codcolbot = v_colbotanica.codpessoa
   LEFT JOIN jabot.categoriatypus ON determinacao.codcattypus =
categoriatypus.codcattypus
   LEFT JOIN jabot.unidgeopolitica estado ON
unidgeopolitica.aux_estado = estado.codunidgeo
   LEFT JOIN jabot.unidgeopolitica pais ON unidgeopolitica.aux_pais =
pais.codunidgeo
   LEFT JOIN jabot.arvoretaxon familia ON arvoretaxon.aux_familia =
familia.codarvtaxon
   LEFT JOIN jabot.arvoretaxon genero ON arvoretaxon.aux_genero =
genero.codarvtaxon
  WHERE testemunho.tombado = true AND basedados.podepublicar ~~*
'T'::text AND v_colbotanica.podepublicar::text ~~* 'S'::text;
--- FIM CONSULTA ----


Ai tem cerca de 22KB só de consulta e deve usar pra mais de 10 tabelas
diferentes. Certamente que nela tem muita gordura que poderia ser
tirada, mas uma vez funcionando, quem se atreve e mexer nisso !?



Em 23/07/07, Leandro Guimarães Faria Corcete DUTRA<[EMAIL PROTECTED]> escreveu:
> Em Seg, 2007-07-23 às 12:42 -0300, Welington R. Braga escreveu:
> > Na realidade eu não sei afirmar com precisão se, em caso de substituir
> > tudo por uma visão, há a necessidade delas serem materializadas
>
>         A idéia da materialização é poder trabalhar somente com o δ dos dados,
> em vez de trazer tudo toda vez.
>
>         Isso dito, a última vez que mexi com isso foi no Oracle 8, não sei 
> como
> está no PostgreSQL.
>
> --
> Leandro Guimarães Faria Corcete DUTRA  <[EMAIL PROTECTED]>
> Atech Fundação Aplicação de Tecnologias Críticas  SP, BR
> msnim:[EMAIL PROTECTED]
> skype:leandro.gfc.dutra?chat     +55 (11) 3040 7300 r151
>
>
> - - - - -
>
> Politica de Privacidade: Esta mensagem pode conter informacao confidencial 
> e/ou privilegiada. Se voce nao for o destinatario ou a pessoa autorizada a 
> receber esta mensagem, nao pode usar, copiar ou divulgar as informacoes nela 
> contidas ou tomar qualquer acao baseada nessas informacoes. Se voce recebeu 
> esta mensagem por engano, por favor avise imediatamente o remetente, 
> respondendo o e-mail e em seguida apague-o. Agradecemos sua cooperacao.
>
> Privacy Policy: This message may contain confidential and/or privileged 
> information. If you are not the addressee or authorized to receive this for 
> the addressee, you must not use, copy, disclose or take any action based on 
> this message or any information herein. If you have received this message in 
> error, please advise the sender immediately by reply e-mail and delete this 
> message. Thank you for your cooperation.
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>


-- 
Welington Rodrigues Braga
    --------------
    Web: http://gtk-br.welrbraga.t5.com.br
    MSN: welrbraga[*]msn·com
    Gtalk: welrbraga[*]gmail·com
    Yahoo / Skype:  welrbraga
    ICQ: 52789331

"Em tudo somos atribulados, porém não angustiados; perplexos, porém
não desanimados; perseguidos, porém não desamparados; abatidos, porém
não destruídos;" - 2Co 4:8,9
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a