Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Flavio Henrique Araque Gurgel
> > Não quero usar view,  preciso desse campo na tabela.
>

O OP poderia nos explicar por que não é possível (ou nas suas palavras, por
que "não quer") usar uma view? Sua simples frase me parece meio agressiva.

Não tem explicação lógica... a única que vejo é que você tem uma aplicação
"imutável" onde o código fonte não está disponível. Nesse caso, você pode
renomear a tabela original, criar a view com o mesmo nome da tabela sobre a
tabela renomeada, acrescentando seu campo calculado, e usar o sistema de
rules para direcionar as operações de modificação para a tabela renomeada,
simples assim.

Me parece um clássico problema XY [1] (em inglês apenas)

[]s
Flavio Gurgel

[1] https://en.wikipedia.org/wiki/XY_problem
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Arthur Nascimento
2018-04-18 8:29 GMT-03:00 Rogério Martins :
> Bom dia pessoal !
>
> É possível criar no PG 9.6 um campo calculado ?
> Exemplo:
>
> select
> t.data_nascimento,
> t.campo_calculado_idade,
> from tabela t
>
> onde:
> t.campo_calculado_idade = date_part('year', age(t.data_nascimento) )
>
> Não quero usar view,  preciso desse campo na tabela.

Sim. A longo prazo, o que você procura é GENERATED COLUMNS, que está
no padrão SQL. Infelizmente não vai entrar nem na v11, mas quem sabe
no futuro. Recomendo dar uma lida na thread de e-mail daqui: [1]

Mas além dos triggers que já disseram aqui, tem um outro truque
abusando da resolução de funções no postgres. É descrito na primeira
resposta da thread principal da feature.

[1] https://commitfest.postgresql.org/17/1443/


Tureba - Arthur Nascimento
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Osvaldo Kussama
Em 18/04/2018, Rogério Martins escreveu:
> Bom dia pessoal !
>
> É possível criar no PG 9.6 um campo calculado ?
> Exemplo:
>
> select
> t.data_nascimento,
> t.campo_calculado_idade,
> from tabela t
>
> onde:
> t.campo_calculado_idade = date_part('year', age(t.data_nascimento) )
>
> Não quero usar view,  preciso desse campo na tabela.
>


Lembre-se de que incluir um campo calculado a partir de outro(s)
campo(s) de sua tabela vai contra as regras de normalização que são
fundamentais para um bom projeto de banco de dados.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Amir
Boam dia...  Rogério Martins

Eu usaria isso... faz o mesmo resultado ou o campo tem que ser guardado
na tabela?

select
t.data_nascimento,
date_part('year', age(t.data_nascimento) ) as t.campo_calculado_idade
from tabela t



Em 18 de abril de 2018 08:29, Rogério Martins 
escreveu:

> Bom dia pessoal !
>
> É possível criar no PG 9.6 um campo calculado ?
> Exemplo:
>
> select
> t.data_nascimento,
> t.campo_calculado_idade,
> from tabela t
>
> onde:
> t.campo_calculado_idade = date_part('year', age(t.data_nascimento) )
>
> Não quero usar view,  preciso desse campo na tabela.
>
> Obrigado
>
>
> --
> The Ubuntu Counter Project - user number # 33192
> 
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Mario Castro Oficial
Basicamente você deverá cria uma function e uma trigger e toda vez que
houver o evento insert e ou update executar'aa função que calculará o
resultado no campo.

No exemplo abaixo a coluna3 é calculada a partir de uma somatoria dos
valores da coluna1 e coluna2, porém vc ajusta a realidade de seu cauculo

funcão:

CREATE OR REPLACE FUNCTION "public"."calcular" () RETURNS trigger AS'
begin
 if (new.coluna1 is null) or (new.coluna2 is null) then
 Raise notice ''Factores para o calculo nulos'';
 new.coluna3 := 0;
 else
 new.coluna3 := (new.coluna1 + new.coluna2);
 end if;
 return new;
end;
'LANGUAGE 'plpgsql' IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER;


trigger:

CREATE TRIGGER "fazcalculo" BEFORE INSERT OR UPDATE
ON "public"."nomeTabela" FOR EACH ROW
EXECUTE PROCEDURE "public"."calcular"();



Atenciosamente,

*Mário R. de Castro*




Em 18 de abril de 2018 08:29, Rogério Martins 
escreveu:

> Bom dia pessoal !
>
> É possível criar no PG 9.6 um campo calculado ?
> Exemplo:
>
> select
> t.data_nascimento,
> t.campo_calculado_idade,
> from tabela t
>
> onde:
> t.campo_calculado_idade = date_part('year', age(t.data_nascimento) )
>
> Não quero usar view,  preciso desse campo na tabela.
>
> Obrigado
>
>
> --
> The Ubuntu Counter Project - user number # 33192
> 
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Campo Calculado

2009-09-24 Por tôpico B i l l
Obrigado Osvaldo!


2009/9/23 Osvaldo Kussama osvaldo.kuss...@gmail.com

 2009/9/23 B   i   l   l uellinton.amo...@gmail.com:


 Crie uma view.
 Direto na tabela não tem sentido, vide regras de normalização.

 Osvaldo
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2009-09-23 Por tôpico Osvaldo Kussama
2009/9/23 B   i   l   l uellinton.amo...@gmail.com:
 Ola pessoal.
 Comecei a usar o postgresql a pouco tempo, e agora estou com uma duvida.
 procurei no forum alguma resposta para a minha duvida, mas nao tinha.
 Ex:
 no banco firebird
 create table tabela(
 id integer,
 valor1 numeric(10,2),
 valor 2 numeric(10,2),
 valor3 numeric(10,2) COMPUTED BY ((VALOR1-VALOR2))
 );
 tem como eu fazer assim no postgresql?
 estou usando a versao 8.3


Crie uma view.
Direto na tabela não tem sentido, vide regras de normalização.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-31 Por tôpico Tiago José Adami

Pelo contrário, gatilhos atrasam as atualizações e representam efeitos

colaterais.
Sim e não. No caso desta thread certamente não ajudaria muita coisa, apenas
tentei justificar a paixão por triggers.
Se fosse um outro caso, como consultar o saldo atual de um item com base em
registros analíticos de E/S, eu recomendaria criar uma tabela de saldo e
atualizá--la com base em nos triggers. Neste caso o atraso seria justificado
e os efeitos colaterais -se existirem - seriam mínimos.
Mas confesso que nesta thread a minha justificativa ficou um pouco fora de
contexto.


Por exemplo.

CREATE VIEW tabela_view AS
SELECT *,campo1+campo2+campo3+campo4+campo5 as SOMA
FROM tabela

Entretanto esta seria uma View de uma tabela. Me referi a estudar uma forma
de incluir esta tabela em uma VIEW (que pudesse ser consultada em
relatórios, por exemplo) para então incluir este campo calculado. Alguma
VIEW que pudesse ser reutilizada, e não apenas uma View para este caso em
específico.

--
Tiago J. Adami

Dois Vizinhos - PR
Brazil

Use linux, and set your soul free!
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-31 Por tôpico Fabio Telles

De fato... gatilhos são procedimentos de alto custo. Em alguns casos um rule
pode até ser um pouco mais barato.

No entanto deve-se realmente avaliar a necessidade de se armazenar uma
informação redundante como esta. Num sistema OLTP com muitas atualizações, é
melhor não gravar o campo calculado e avaliar o resultado durante a leitura,
num simples select ou num view. Se você estiver trabalhando com um BI com
vários cálculos, projeções, resumos e sistematizações... o uso de views
materializadas podem ser uma boa opção. Dá muito mais trabalho e a
complexidade aumenta um bocado. Para lançar mão deste tipo de recurso deve
haver uma boa justificativa e o desenvolvedor deve saber o que está fazendo.
Afinal, existem alguns tipos de view smaterializadas e várias formas de
implementa-las no PostgreSQL via PL. No mais, um sistema tradicional de Data
Warehouse costuma envolver bases separadas e todo um sistema de ETL para
fazer tudo isso.

Estou exagerando um pouco os fatos, só para ter uma idéia de onde você pode
ir parar, criando campos calculados... é claro que uma modelagem tradicional
não deve conter campos calculados. Em alguns momentos quebramos as regras, é
por isso que tem gente de usa tantas formas normais quanto as letras do
alfabeto ;-) Mas veja bem... apesar de toda regra existir para ser quebrada,
você deve avaliar muito bem quando quebra-la. Isto sempre vai ter um custo
mais tarde. Se você não tiver muita experiência com modelagem, vai descobrir
o preço que pagou por quebrar as regras muito tarde. Já vi gente perceber a
mancada somente depois de alguns anos com o sistema em produção, com
gargalos de performance terríveis. Concertar depois que o sistema entra em
produção é difícil, perigoso e muito trabalhoso.

Bom, por hoje é só pessoal,

[]s
Fábio Telles

Em 31/05/07, Leandro Guimarães Faria Corcete DUTRA 
[EMAIL PROTECTED] escreveu:


Em Qua, 2007-05-30 às 08:27 -0300, Tiago José Adami escreveu:
 Por que essa paixão por gatilhos quando simples comandos SQL
 resolvem?
 Eu diria por causa do desempenho e usabilidade.

Pelo contrário, gatilhos atrasam as atualizações e representam
efeitos
colaterais.


 Mas como trata-se de uma coluna em uma só tabela, acredito que uma
 análise mais detalhada poderia gerar uma View

Por exemplo.


  que estivesse preparada também para outras consultas.

Não entendi esta parte.





--
site: http://www.midstorm.org/~telles/
e-mail: [EMAIL PROTECTED]
jabber: [EMAIL PROTECTED]
sip:[EMAIL PROTECTED]
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-30 Por tôpico Wallace Reis

On 5/30/07, Leonardo Chaves [EMAIL PROTECTED] wrote:

Leandro , simples comando resolvem sim . Mas sem o gatilho como faze-los?


Crie uma função em SQL que faça a soma e:

test=# SELECT *, foo.function_sql FROM foo;

--
wallace reis/wreis
Núcleo de Biologia Computacional e
Gestão de Informações Biotecnológicas/LABBI
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-29 Por tôpico Leonardo Chaves

Melhor não ignorar os conselhos anteriores mas se quiser insistir nisso ai .
use essa trigger.

CREATE OR REPLACE FUNCTION trigger_insert_tabela() RETURNS TRIGGER AS
$$
BEGIN
NEW.campo6 = NEW.campo1 + NEW.campo2 + NEW.campo3 + NEW.campo4 + NEW.campo5;
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL VOLATILE;

CREATE TRIGGER trg_update_tabela BEFORE INSERT ON tabela
FOR EACH ROW EXECUTE PROCEDURE trigger_update_tabela();

Em 28/05/07, Leandro Guimarães Faria Corcete DUTRA 
[EMAIL PROTECTED] escreveu:


Em Seg, 2007-05-28 às 12:36 -0700, Osvaldo Kussama escreveu:

 Luciano - Uol wrote:
 
  Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns
  valores, após a inserção eu queria colocar no 6 campo o valor da soma
  desses 5 campos automaticamente, como fazer?

Primeiro, escrever melhor para a gente entender.  6 campo?  Deve
ser
6º.


 Ter um campo em uma tabela que é derivado de outros é um grave erro de
 projeto de seu banco de dados.
 Estude um pouco sobre normalização, particularmente dependência
funcional, e
 refaça seu projeto de bd. Certamente você terá menos dores de cabeça no
 futuro.

Segundo, ouvir o conselho do Osvaldo.

Terceiro, UPDATE tabela SET sexto = primeiro + segundo + terceiro
+
quarto + quinto;

--
+55 (11) 2122 0302   http://br.geocities.com./lgcdutra/
+55 (11) 5685 2219  gTalk: xmpp:[EMAIL PROTECTED]
+55 (11) 9406 7191Yahoo!: ymsgr:sendIM?lgcdutra
+55 (11) 5686 9607ICQ/AIM: aim:GoIM?screenname=61287803
  MSN: msnim:[EMAIL PROTECTED]


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
Att,
Leonardo Chaves de Freitas

QualyConsult
Analista de Bando de Dados  - DBA
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-29 Por tôpico Liliana Matos

já respondido em:

http://listas.postgresql.org.br/pipermail/pgbr-geral/2007-May/000817.html

On 5/29/07, Leonardo Chaves [EMAIL PROTECTED] wrote:


Melhor não ignorar os conselhos anteriores mas se quiser insistir nisso ai
. use essa trigger.

CREATE OR REPLACE FUNCTION trigger_insert_tabela() RETURNS TRIGGER AS
$$
BEGIN
NEW.campo6 = NEW.campo1 + NEW.campo2 + NEW.campo3 + NEW.campo4 +
NEW.campo5;
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL VOLATILE;

CREATE TRIGGER trg_update_tabela BEFORE INSERT ON tabela
FOR EACH ROW EXECUTE PROCEDURE trigger_update_tabela();

Em 28/05/07, Leandro Guimarães Faria Corcete DUTRA 
[EMAIL PROTECTED] escreveu:

 Em Seg, 2007-05-28 às 12:36 -0700, Osvaldo Kussama escreveu:
 
  Luciano - Uol wrote:
  
   Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns
   valores, após a inserção eu queria colocar no 6 campo o valor da
 soma
   desses 5 campos automaticamente, como fazer?

 Primeiro, escrever melhor para a gente entender.  6 campo?  Deve
 ser
 6º.


  Ter um campo em uma tabela que é derivado de outros é um grave erro de

  projeto de seu banco de dados.
  Estude um pouco sobre normalização, particularmente dependência
 funcional, e
  refaça seu projeto de bd. Certamente você terá menos dores de cabeça
 no
  futuro.

 Segundo, ouvir o conselho do Osvaldo.

 Terceiro, UPDATE tabela SET sexto = primeiro + segundo +
 terceiro +
 quarto + quinto;

 --
 +55 (11) 2122 0302   http://br.geocities.com./lgcdutra/
 +55 (11) 5685 2219  gTalk: xmpp:[EMAIL PROTECTED]
 +55 (11) 9406 7191Yahoo!: ymsgr:sendIM?lgcdutra
 +55 (11) 5686 9607ICQ/AIM: aim:GoIM?screenname=61287803
   MSN: msnim:[EMAIL PROTECTED]


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




--
Att,
Leonardo Chaves de Freitas

QualyConsult
Analista de Bando de Dados  - DBA
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-28 Por tôpico Liliana Matos

use triggers
on event insert e on event update

Liliana Matos.

On 5/28/07, Luciano - Uol [EMAIL PROTECTED] wrote:


Pessoal,

Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns
valores, após a inserção eu queria colocar no 6 campo o valor da soma
desses 5 campos automaticamente, como fazer?

Luciano
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-28 Por tôpico João Paulo

Opa,

Acho que ajuda

select sum(campo1+campo2+campo3+campo4+campo5) from tabela;

Esta ajuda, mas não creio que seja a melhor maneira.

João Paulo.

Em 28/05/07, Luciano - Uol [EMAIL PROTECTED] escreveu:


Pessoal,

Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns
valores, após a inserção eu queria colocar no 6 campo o valor da soma
desses 5 campos automaticamente, como fazer?

Luciano
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-28 Por tôpico José Mello Júnior

Crie uma Trigger a qual chama uma função que retonar um integer com o
resultado da somatória.

[]´s


Em 28/05/07, Luciano - Uol [EMAIL PROTECTED] escreveu:


Pessoal,

Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns
valores, após a inserção eu queria colocar no 6 campo o valor da soma
desses 5 campos automaticamente, como fazer?

Luciano
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral





--
José de Mello Júnior
41.9933-8642
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-28 Por tôpico Osvaldo Kussama



Luciano - Uol wrote:
 
 
 Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns 
 valores, após a inserção eu queria colocar no 6 campo o valor da soma 
 desses 5 campos automaticamente, como fazer?
 


Ter um campo em uma tabela que é derivado de outros é um grave erro de
projeto de seu banco de dados.
Estude um pouco sobre normalização, particularmente dependência funcional, e
refaça seu projeto de bd. Certamente você terá menos dores de cabeça no
futuro.

[]s
Osvaldo

-- 
View this message in context: 
http://www.nabble.com/Campo-Calculado-tf3828317.html#a10840922
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Campo Calculado

2007-05-28 Por tôpico Leandro Guimarães Faria Corcete DUTRA
Em Seg, 2007-05-28 às 12:36 -0700, Osvaldo Kussama escreveu:
 
 Luciano - Uol wrote:
  
  Tenho um tabela com 5 campos numeric(15,2) o qual eu digito alguns 
  valores, após a inserção eu queria colocar no 6 campo o valor da soma 
  desses 5 campos automaticamente, como fazer?

Primeiro, escrever melhor para a gente entender.  6 campo?  Deve ser
6º.


 Ter um campo em uma tabela que é derivado de outros é um grave erro de
 projeto de seu banco de dados.
 Estude um pouco sobre normalização, particularmente dependência funcional, e
 refaça seu projeto de bd. Certamente você terá menos dores de cabeça no
 futuro.

Segundo, ouvir o conselho do Osvaldo.

Terceiro, UPDATE tabela SET sexto = primeiro + segundo + terceiro +
quarto + quinto;

-- 
+55 (11) 2122 0302   http://br.geocities.com./lgcdutra/
+55 (11) 5685 2219  gTalk: xmpp:[EMAIL PROTECTED]
+55 (11) 9406 7191Yahoo!: ymsgr:sendIM?lgcdutra
+55 (11) 5686 9607ICQ/AIM: aim:GoIM?screenname=61287803
  MSN: msnim:[EMAIL PROTECTED]

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral