-----------------------------------------------------------------------------------------------------------------------------
--> Mensagem enviada com assunto  Digest pgbr-geral, volume 52, assunto 36

Em 11 de abril de 2013 11:46, Douglas Fabiano Specht <
[email protected]> escreveu:
>
> Marcone,
> para um update setando tudo como zero, criando o campo como defalut
agiliza bastante, mas o problema é quando eu tenho que recalcular um campo
da tabela toda ja nao daria, exemplo:
>
> update tabela set campo3=campo1-campo3 where campo4=4
>
> alguem teria outra sugestão?
>
> Douglas Specht
-----------------------------------------------------------------------------------------------------------------------------

Douglas... favor não enviar mensagens em resposta a Disgests e manter
a discussão na mesma thread. Isso bagunça o histórico da lista e muitos dos
amigos (meu caso) não lêem Disgests. Por coincidência percebi que eu havia
respondido uma pergunta sua e resolvi dar uma olhada.

Não entendi bem seu caso então... Quando trabalhamos com bases de dados
maiores tem casos em que o para executar determinada mudança de estrutura
vai ter um custo (processamento, tempo, etc).

A minha dica foi baseada em um post meio antigo (se não me engano do Fabio
Telles) que falava sobre "não fazer delete, fazer insert" ou coisa
parecida, porém o google não facilitou minha vida para eu te encaminhar
esse link. Esse post fala que no caso de excluir muitos registros seria
mais eficiente inserir os que não seriam deletados em uma "nova tabela".

Aí eu usei essa dica em algumas situações em meus ambiente e consegui bons
resultado, adaptando também para casos de inclusão de coluna que foi o que
eu tentei te indicar em linhas gerais.

Essa dica você pode adaptar para campo calculados sem problemas, mas eu
acho que se você tem um campo calculado com base em campos na mesma linha
da tabela, não vejo motivo para você ter esse cálculo (a menus que o
cálculo em si seja muito, muito, muito complexo - acho que isso pode gerar
outra thread)

Em fim... vou tentar de dar um exemplo:

-----------------------------------
-- tabela original
create table rotiginal(
id integer primary key,
dado varchar);

-- novo campo seria assim
create table tmp_original as table original; -- Veja a sintaxy correta

alter table tmp_original add column campo_concat varchar;

insert into tmp_original
select id,
    dado,
    dado || ' - ' || id::varchar
from original;

drop table original;

alter table tmp_original rename to original;

-- Restaurar todas as constraints e índices
-----------------------------------

Nesse caso você também terá de verificar se esse processo será mais rápido
ou não.

Como falei no outro e-mail... você tem que validar esse procedimento, se
você não tiver segurança disso vai no add column e update mesmo.

Espero ter ajudado.

--
Marcone Peres - DBA
http://www.linkedin.com/in/marconeperes
http://oraculogeo.blogspot.com.br/
@marconeperes
(61) 8146-0028
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a