é 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