é 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
> [email protected]
> 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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral